C++ 使映射键按照插入顺序排序

C++ 使映射键按照插入顺序排序,c++,stl,C++,Stl,如果没有其他容器(如vector)的帮助,我是否可以使映射的键排序为与插入序列相同的序列 #include <map> #include <iostream> using namespace std; int main() { map<const char*, int> m; m["c"] = 2; m["b"] = 2; m["a"] = 2; m["d"] = 2; for (map<const char*, int&

如果没有其他容器(如vector)的帮助,我是否可以使映射的键排序为与插入序列相同的序列

#include <map>
#include <iostream>

using namespace std;

int main()
{
  map<const char*, int> m;
  m["c"] = 2;
  m["b"] = 2;
  m["a"] = 2;
  m["d"] = 2;


  for (map<const char*, int>::iterator begin = m.begin(); begin != m.end(); begin++) {
      // How can I get the loop sequence same as my insert sequence.
      // c, b, a, d
      std::cout << begin->first << std::endl;
  }

  getchar();
}
#包括
#包括
使用名称空间std;
int main()
{
地图m;
m[“c”]=2;
m[“b”]=2;
m[“a”]=2;
m[“d”]=2;
for(map::iterator begin=m.begin();begin!=m.end();begin++){
//如何获得与插入序列相同的循环序列。
//c、b、a、d

std::cout first否。A
std::map
是一个已排序的容器;不维护插入顺序。有许多解决方案使用第二个容器来维护插入顺序

也就是说,您应该使用
std::string
作为键。使用
const char*
作为映射键是个坏主意:它几乎不可能通过其键访问或搜索元素,因为只会比较指针,而不会比较字符串本身。

否。
std::map
根据第三个模板进行排序参数
Compare
,默认为
std::less
。如果需要插入序列,可以使用
std::list

编辑:
如前所述,任何顺序STL容器都可以:
vector
deque
list
,或者在这个特殊情况下,事件
string
。您必须决定每种容器的优点。

考虑使用boost::multi_索引容器而不是std::map。您可以同时放置有序映射索引和unor在您的容器上排序顺序索引。

谢谢。似乎是一个重复的问题。iiirrk。还有另一个开发人员推荐了一个
列表
。如果Neil听到这个消息,他会揍你的头。提示:您最好推荐一个
向量
deque
,这里绝对没有建议使用的要求g a
list
非常有用。也不需要使用vector。在某个时候,人们必须学会自己做决定,而不仅仅是听尼尔的。