gpt4 book ai didi

c++ - STL map 和 set 中的排序顺序

转载 作者:可可西里 更新时间:2023-11-01 17:38:37 27 4
gpt4 key购买 nike

用户定义的对象在 map 和 set 中是如何排序的?据我所知,map/set 是 Sorted Associative Containers:被插入的元素根据其持有的键进行排序。

但是 map 和 set 在内部使用 operator > 对它们的元素进行排序。

在 SGI 站点上,我有以下示例:

struct ltstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) < 0;
}
};

int main()
{
map<const char*, int, ltstr> months;

months["january"] = 31;
months["february"] = 28;
months["march"] = 31;
months["april"] = 30;
months["may"] = 31;
months["june"] = 30;
months["july"] = 31;
months["august"] = 31;
months["september"] = 30;
months["october"] = 31;
months["november"] = 30;
months["december"] = 31;

cout << "june -> " << months["june"] << endl;

map<const char*, int, ltstr>::iterator cur = months.find("june");
map<const char*, int, ltstr>::iterator prev = cur;
map<const char*, int, ltstr>::iterator next = cur;

++next;
--prev;

cout << "Previous (in alphabetical order) is " << (*prev).first << endl;
cout << "Next (in alphabetical order) is " << (*next).first << endl;
}

在上面的例子中,值是如何排序的?

编辑:从评论中移出的代码:

typedef map <string, int> Mint ;

int main()
{
string Name ;
int Marks;
Mint Grade;
for (int i = 0; i<4; i++)
{
cin>> Name ;
cin >> Marks;
Grade [Name] = Marks ;
}
Mint :: iterator iter;
for( iter = Grade.begin(); iter != Grade.end(); iter++)
cout<< (*iter).first<<“ \t ” <<(*iter).second<<“\n” ;
return 0;

}

如何对值进行排序?

最佳答案

std::map 使用仿函数对元素进行排序。默认情况下是 std::less<Key> 使用operator< .在您的示例中有一个用户定义的仿函数 ltstr这将有助于根据其键按字母顺序对元素进行排序。

关于c++ - STL map 和 set 中的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3370185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com