使用Cmp,我正在按对的第二个值对多集进行排序。
问题1:我没有使用set,因为我无法同时存储{5,3}和{6,3},而且由于它们不同,我也不知道为什么。
using pair_type = std::pair<int, int>;
struct Cmp
{
bool operator()(const pair_type& v1, const pair_type& v2) const
{
return v1.second < v2.second;
}
};
int main()
{
multiset<pair_type,Cmp> m;
m.insert({1,1});
m.insert({2,1});
m.insert({3,2});
m.insert({4,2});
m.insert({5,3});
m.insert({6,3});
auto itr = m.find({6,3});
m.erase(itr);
}
问题2:同样,m.erase擦除{5,3}而不是{6,3},即擦除具有相同第二个值的第一对。实际上m.find({6,3})返回{5,3} 。什么原因造成的,以及如何解决这两个问题?
您明确地仅将cmp中的second参数对进行比较:
return v1.second < v2.second;
您需要同时比较两者:
return v1 < v2;
如果您不这样做,那么查找将找到您所看到的任何值为{xxx,3}的项目。如果进行此更改,则可以使用集合,因为值将有所不同。