为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
侃侃无极 2019-09-02 09:13:00
我目前有一个std::map<std::string,int>存储整数值到唯一字符串标识符,我确实查找字符串。它主要是我想要的,除了它不跟踪插入顺序。因此,当我迭代地图以打印出值时,它们将根据字符串进行排序; 但是我希望它们按照(第一次)插入的顺序排序。我想过使用一个vector<pair<string,int>>替代,但我需要查找字符串并将整数值增加大约10,000,000次,所以我不知道是否std::vector会明显变慢。有没有办法使用std::map或是否有std更适合我需要的容器?[我在GCC 3.4上,我的价值可能不超过50对std::map]。谢谢。
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

如果你在std :: map中只有50个值,你可以在打印之前将它们复制到std :: vector,并使用适当的函子通过std :: sort进行排序。


或者你可以使用boost :: multi_index。它允许使用多个索引。在您的情况下,它可能如下所示:


struct value_t {

      string s;

      int    i;

};

struct string_tag {};

typedef multi_index_container<

    value_t,

    indexed_by<

        random_access<>, // this index represents insertion order

        hashed_unique< tag<string_tag>, member<value_t, string, &value_t::s> >

    >

> values_t;


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 1099 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信