首页 > 解决方案 > 按 key 的绝对值对 std::map 排序

问题描述

我想std::map用下面的代码按 key 的绝对值订购一个作为通常的定制订单

vector<int> A = {-4,4,-2,2};
auto cmp = [](int a, int b) { return abs(a) < abs(b); };
map<int, int, decltype(cmp)> m(cmp);
for (int x : A)  m[x]++;

但结果是m = {{-4,2},{-2,2}}。我不知道,为什么钥匙42失踪。我想保留所有价值观,实际上我并不关心=ie4,-4并且-4,4对我来说都可以。我只在值不同时订购它们。

标签: c++dictionary

解决方案


4您的比较功能使您的地图将键-4视为等效项。同上 键2-2,这样就解释了你得到的结果,因为 a 中的键map必须是唯一的。


推荐阅读