我目前有一个 std::map<std::string,int>
将一个整数值存储到一个唯一的字符串标识符中,我确实使用该字符串进行查找。它主要做我想要的,除了它不跟踪插入顺序。因此,当我迭代地图以打印出值时,它们会根据字符串进行排序;但我希望它们根据(第一次)插入的顺序进行排序。
我考虑过使用 vector<pair<string,int>>
代替,但我需要查找字符串并将整数值递增约 10,000,000 次,所以我不知道 std::vector
是否会明显变慢.
有没有办法使用 std::map
或者是否有另一个 std
容器更适合我的需要?
我在 GCC 3.4 上,我的 std::map
中的值可能不超过 50 对。
原文由 polyglot 发布,翻译遵循 CC BY-SA 4.0 许可协议
无需 使用单独的
std::vector
或任何其他容器来跟踪插入顺序。你可以做你想做的,如下所示。如果您想保留广告订单,则可以使用以下程序(版本 1):版本 1 :使用
std::map<std::string,int>
按 插入顺序 计算唯一字符串上述 程序 的输出如下:
请注意,在上述程序中,如果您有逗号或任何其他分隔符,则它被视为一个单独的单词。例如,假设您有字符串
this is, my name is
然后字符串is,
的计数为 1,而字符串is
is,
计数为 1。---
和is
是不同的。这是因为计算机不知道我们对 单词 的定义。笔记
上面的程序是我对 如何在这个嵌套的 for 循环中按顺序输出数组中的字符的答案的修改? 以下为第 2 版:
版本 2 :使用
std::map<char, int>
按 插入顺序 计算唯一字符在这两种情况/版本中, 无需 使用单独的
std::vector
或任何其他容器来跟踪插入顺序。