gpt4 book ai didi

c++ - 对 STL 集使用比较器

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:43 24 4
gpt4 key购买 nike

检查以下代码:

string toLowerCase(const string& str) {
string res(str);
int i;

for (i = 0; i < (int) res.size(); i++)
res[i] = (char) tolower(res[i]);

return res;
}

class LeagueComparator
{
public:
bool operator()(const string& s1, const string& s2)
{
return toLowerCase(s1) < toLowerCase(s2);
}
};

int main()
{
set<string, LeagueComparator> leagues;
set<string, LeagueComparator>::iterator iter;

leagues.insert("BLeague");
leagues.insert("aLeague"); // leagues = {"aLeague", "BLeague"}
leagues.insert("ALeague");

for (iter = leagues.begin(); iter != leagues.end(); iter++)
cout << *iter << endl;

return 0;
}

输出是:

aLeague
BLeague

这让我很震惊。我认为(并期待)输出将是:

aLeague
ALeague
BLeague

在执行leagues.insert("ALeague");之前,leagues包含"aLeague""BLeague “。我的问题是,在执行 leagues.insert("ALeague"); 时,为什么机器会处理 "ALeague"== "aleague"?据我了解,leagues 中没有元素"ALeague"。所以 "ALeague" 应该被插入到 leagues 中。比较器应确定放置 "ALeague" 的位置。

提前致谢。

PS:请不要因为使用 C 风格转换而打我。 :P 我懒得输入 static_cast

最佳答案

你的比较器,多亏了 toLowerCase ,说 "aLeague" == "ALeague" .自(根据您的比较器)"aLeague" < "ALeague" == false"ALeague" < "aLeague" == false ,它们必须相等。将等效元素插入集合中不会执行任何操作。

关于c++ - 对 STL 集使用比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4057445/

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