相关疑难解决方法(0)

一个跟踪插入顺序的std :: map?

我目前有一个std::map<std::string,int>存储整数值到唯一字符串标识符,我确实查找字符串.它主要是我想要的,除了它不跟踪插入顺序.因此,当我迭代地图以打印出值时,它们将根据字符串进行排序; 但是我希望它们按照(第一次)插入的顺序排序.

我想过使用一个vector<pair<string,int>>替代,但我需要查找字符串并将整数值增加大约10,000,000次,所以我不知道是否std::vector会明显变慢.

有没有办法使用std::map或是否有std更适合我需要的容器?

[我在GCC 3.4上,我的价值可能不超过50对std::map].

谢谢.

c++ dictionary std insertion-order

98
推荐指数
5
解决办法
7万
查看次数

保留 std::set 或 std::unordered_set 上的插入顺序

在将其标记为重复之前,我已经在此处此处此处重复了第一个

我知道boost::multi_index,并且使用了一个我缺乏它的环境,并且 astd::unordered_set不一定以确定的插入顺序存储元素。

我发现使用两个容器的概念,说一个额外的std::vector粗鲁。

想要的是一个涉及比较器的解决方案,我可以在 a 的std::set模板参数中使用它(澄清一下,这可能是一个简单的函子结构,包含bool operator()()重载、常规函数或 lambda)。是否可以?

附加物

  1. 初始化必须通过 std:: 容器的开始迭代器/结束迭代器构造函数进行,如本代码片段所示。

    std::string str; cin >> str;
    std::set<char>(str.begin(), str.end());
    
    Run Code Online (Sandbox Code Playgroud)
  2. 另外,另一个有趣的用例是创建一个哑散列包装函子,允许将插入顺序推入 astd::unordered_set的模板参数中。

c++ boost stl set c++11

6
推荐指数
1
解决办法
3933
查看次数

标签 统计

c++ ×2

boost ×1

c++11 ×1

dictionary ×1

insertion-order ×1

set ×1

std ×1

stl ×1