为什么不;名字在地图上是按顺序排列的吗

why wouldn't names come out in arranged order in maps?

本文关键字:顺序 排列 地图 为什么不      更新时间:2023-10-16

我在map中遇到了一个问题,我试图定制map,但它以不同的顺序出现。是不是有办法让它按安排好的顺序出来。

#include<iostream>
#include<map>
int main(){
std::map<std::string,int> person;
person["Mostafa"]=12;
person["Mickel"]=14;
person["tftf"]=141;
person["Daniel"]=15;
std::map<std::string,int>::iterator it;
for(it=person.begin();it!=person.end();it++){
std::pair<std::string,int> memo=*it;
std::cout<<memo.first<<": "<<memo.second<<std::endl;
}
std::cin.get();
return 0;
}

输出为:丹尼尔:15岁米克尔:14穆斯塔法:12tftf:141

它很简单,std::map按键(在您的例子中是名称(对其项进行排序。你可能想为你的问题找到另一个解决方案,例如容器。这是前面的一个问题和一个答案,可能会给你一些见解。

std::map,如何按值排序,然后按键排序

您可以使用pairvector来解决此问题
-首先,将类型person定义为stringintpair
-其次,定义一个persons的vector,然后根据需要添加到vector
然后您就可以按照插入的顺序打印了。

#include<iostream>
#include<map>
#include<vector>
int main(){
typedef std::pair<std::string,int> person;
std::vector<person> vMap;
vMap.emplace_back("Mostafa", 12);
vMap.emplace_back("Mickel", 14);
vMap.emplace_back("tftf", 141);
vMap.emplace_back("Daniel", 15);
for(const auto& a: vMap)
std::cout<<a.first<< " " << a.second<<std::endl;
return 0;
}

这是一个现场演示:https://coliru.stacked-crooked.com/a/7913c31d50074bdc