C++ 使映射键按照插入顺序排序
如果没有其他容器(如vector)的帮助,我是否可以使映射的键排序为与插入序列相同的序列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&
#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否。Astd::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 alist
非常有用。也不需要使用vector。在某个时候,人们必须学会自己做决定,而不仅仅是听尼尔的。