struct SortS
{
int nNum;
string strName;
bool bFlag; //false->按照num比較 true->按照Name比較
SortS():nNum(0), strName(""), bFlag(false)
{}
bool operator<(const SortS &stSortS) const
{
bool bRet = false;
if(!bFlag && !stSortS.bFlag)
{
bRet = nNum < stSortS.nNum;
}
else
{
bRet = strName < stSortS.strName; //???
}
return bRet;
}
};
int main()
{
map<SortS, string> mapSortTest;
SortS stSort1;
stSort1.nNum = 1;
stSort1.strName = "111";
SortS stSort2;
stSort2.nNum = 2;
stSort2.strName = "222";
SortS stSort3;
stSort3.nNum = 3;
stSort3.strName = "333";
SortS stSort4;
stSort4.nNum = 4;
stSort4.strName = "444";
mapSortTest.insert(pair<SortS, string>(stSort1, "liu111"));
mapSortTest.insert(pair<SortS, string>(stSort2, "liu222"));
mapSortTest.insert(pair<SortS, string>(stSort3, "liu333"));
mapSortTest.insert(pair<SortS, string>(stSort4, "liu444"));
map<SortS, string>::iterator it = mapSortTest.begin();
for( ; it != mapSortTest.end(); ++it)
{
printf("it.first: %d %s second:%s\n", it->first.nNum, it->first.strName.c_str(),
it->second.c_str());
}
printf("\n\n");
SortS stSort5;
stSort5.bFlag = true;
stSort5.strName = "222";
it = mapSortTest.find(stSort5);
if(it == mapSortTest.end())
{
printf("66666666666666666666666666666\n");
}
else
{
printf("77777777777777777777777777777\n");
}
it = mapSortTest.begin();
for( ; it != mapSortTest.end(); ++it)
{
printf("it.first: %d %s second:%s\n", it->first.nNum, it->first.strName.c_str(),
it->second.c_str());
}
system("pause");
return 0;
}
在上面代碼加 ???的地方,如果我的排序規則使用 >的話,map的find就會找不到,但是如果排序規則使用 <的話(和上面num一致),map的find就可以找到。。。目前無法理解,請教大神解釋一下。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/62977.html
標籤:基礎類
上一篇:C++ builder 運行報錯
