可以得出以下结论
1、unordered_map的存储数据是通过出栈入栈的方式,即第一个进入的是最后一个
2、因此升序排列map的时候需要谓词不能使用默认值less<_Kty>,第三个参数需要传入大于的greater<_Kty>,或者反向遍历multimap 存储到unordered_map
1、unordered_map反向遍历
typedef std::unordered_map<StdId, CString, HashStdId> UnordermapStdIdCStr;
UnordermapStdIdCStr& mmapFaultCol3d = pProject->mmapFaultCol3d; //标高表
UnordermapStdIdCStr& mmapFaultBem3d = pProject->mmapFaultBem3d; //标高表
multimap<CString, StdId>::reverse_iterator rit;
multimap<CString, StdId>::reverse_iterator rit2;
for (rit = faultCol.rbegin(); rit != faultCol.rend(); ++rit)
mmapFaultCol3d.insert({ rit->second, rit->first });
for (rit2 = faultBem.rbegin(); rit2 != faultBem.rend(); ++rit2)
mmapFaultBem3d.insert({ rit2->second, rit2->first });
StdDbTool::CommitModify(gpParaProject->Get_mid(), pProject);
2、multimap 降序排列 greater<_Kty>
std::multimap<CString, StdId, greater<CString>> faultCol;
std::multimap<CString, StdId, greater<CString>> faultBem;
auto iterCol = mVctid3dCol.begin();
while (iterCol != mVctid3dCol.end())
{
stCrvtId& id = *iterCol;
if (!id.mbMatch)
faultCol.insert({ id.mSectName, id.midDb});
iterCol++;
}
auto iterBem = mVctid3dBem.begin();
while (iterBem != mVctid3dBem.end())
{
stCrvtId& id = *iterBem;
if (!id.mbMatch)
faultBem.insert({ id.mSectName, id.midDb });
iterBem++;
}
结果就不给出了,自己测一下就能得到