c++ - 按键的绝对值排序 std::map

标签 c++ dictionary

我想按键的绝对值来订购一个std::map,下面的代码作为通常的自定义顺序

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。我想保留所有值,实际上我不关心 =4,-4-4,4 都可以为我。我只在值不同时才订购它们。

最佳答案

您的比较函数使您的 map 将键 4-4 视为等同的。键 2-2 也是如此,这样就可以解释您得到的结果,因为 map 中的键必须是唯一的。

关于c++ - 按键的绝对值排序 std::map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63094294/

相关文章:

c++ - 基于范围的循环声明必须声明一个变量

c++ - 如何初始化常量字符串集

c++ - 在同一循环中集成 pthread_create() 和 pthread_join()

c++ - 使用opencv和c++使用直方图分析连通分量的特征

java - 如何使用 JPA 2.1 中设置的非唯一值映射 Map<String, Entity>?

python - 从以字典格式接收的 API 中清理原始价格数据 (Python)

java - 按值对 Map<Key, Value> 进行排序

c++ - 如何使用 C++ 以编程方式检测 Windows 8 中是否启用了 UAC?

java - 使用包含重复键或值的 Map 中的值获取键

c++ - 调试断言失败的映射/设置迭代器不可取消引用