通过将key封装为一个类,类中重写operator<来实现。
#include <map>
#include <iostream>
class CKey
{
public:
CKey(int nSenderId, int nTcpsessionId) : m_nSenderId(nSenderId), m_nTcpsessionId(nTcpsessionId) {}
~CKey() = default;
int m_nSenderId;
int m_nTcpsessionId;
bool operator<(const CKey& v) const
{
if (this->m_nSenderId < v.m_nSenderId) return true;
else if (this->m_nSenderId == v.m_nSenderId)
{
if (this->m_nTcpsessionId < v.m_nTcpsessionId) return true;
}
return false;
}
};
int main ()
{
CKey pk12(1, 2);
CKey pk13(1, 3);
CKey pk23(2, 3);
// pk12 < pk13 < pk23
std::map<CKey, int> mapkey;
mapkey.insert(std::make_pair(pk13,13));
mapkey.insert(std::make_pair(pk12,12));
mapkey.insert(std::make_pair(pk23,23));
for (auto item : mapkey)
{
std::cout << item.first.m_nSenderId << " " << item.first.m_nTcpsessionId << " " << item.second << std::endl;
}
return 0;
}