c++ - 以 std::map<char*, int> mymap 的顺序在 map 中存储字符指针。将其存储为字符或字符串不是一种选择

标签 c++ stl

<分区>

std::map<char*, int> mymap; 
mymap['a'] = 1; 
mymap['b'] = 2;
mymap['c'] = 3;  

如果插入顺序发生变化,如何按特定顺序打印 1、2、3? 我不知道插入顺序。但是每次输出的顺序应该是一样的。

最佳答案

I don't know the insertion order . But the order of output should be same everytime.

这正是 std::map 的方式作品。迭代器按照由映射比较器引起的严格弱排序遍历元素。插入顺序不影响迭代顺序。

std::map<char*, int> How to print 1, 2, 3 in that particular order.

这里的问题是映射是按键而不是按值排序的。

如果您需要按值顺序迭代 map 的元素,那么您似乎需要一个多索引容器。这样的容器可以通过一个索引查找,并使用另一个索引进行迭代。然而,C++ 标准库不提供此类多索引容器。

多索引容器的思想很简单。它由节点组成,就像列表或树一样,但每个节点包含多组链接 - 每个索引一个。这种容器的通用实现并不像想法那么简单。

mymap['a'] = 1;

您不能使用 char作为键类型为 char* 的映射的查找参数.

关于c++ - 以 std::map<char*, int> mymap 的顺序在 map 中存储字符指针。将其存储为字符或字符串不是一种选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56612281/

相关文章:

c++ - 使用 C++ 在 DLL 中进行子类化

c++ - 使用 Qt 时删除 CMake 3.14.0 中的 CMP0020 错误

c++ - C++编程实践与异常处理的混淆

c++ - 创建新类的开销

c++ - std::ifstream::open() 不工作

c++ - 如何用非平凡的初始值填充 vector ?

c++ - "class"返回类型的关键字 - C++

c++ - 更改 C++ 程序入口点。 STL 崩溃

c++ - 标准库类型赋值运算符的引用限定符

c++ - 使用 ostream_iterator 和运算符 << 显示指针 vector