gpt4 book ai didi

c++ - 在插入集合 C++ 之前比较字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:44 27 4
gpt4 key购买 nike

我试图通过比较字符串的长度来比较字符串,然后再插入到我的集合中。应首先插入最短的字符串。我不知道发生了什么,但有些话不在片场。

我的代码:

#include <iostream>
#include <string>
#include <set>

struct compare {
bool operator() (const string& a, const string& b) const{
return a.size() < b.size();
}
};

template<typename T>
void print(const T& t){
for(auto& it : t)
cout << it << endl;
}

int main() {
string word;
set<string, compare> c;

while(cin >> word)
c.insert(word);

print(c);

return 0;
}

这里是要插入的测试词

Apple
Apricots
Avocado
Durian
Fig
Tangerine/Clementine
Kumquat
Lemon
Pear
Prunes
Raspberries
Strawberries
Watermelon

这是输出

Fig
Pear
Apple
Durian
Avocado
Apricots
Watermelon
Raspberries
Strawberries
Tangerine/Clementine

它按预期工作,但显然缺少一些单词喜欢:

Kumquat
Lemon
Prunes

最佳答案

A std::set不能包含重复项。在这种情况下,它不能有两个相同长度的字符串。也许使用 std::multiset 会更好?

#include <iostream>
#include <string>
#include <set>

struct compare {
bool operator() (const std::string& a, const std::string& b) const{
return a.size() < b.size();
}
};

template<typename T>
void print(const T& t){
for(auto& it : t)
std::cout << it << std::endl;
}

int main() {
std::string word;
std::multiset<std::string, compare> c; // multiset!!!

while(std::cin >> word)
c.insert(word);

print(c);

return 0;
}

输出:

Fig
Pear
Apple
Lemon
Durian
Prunes
Avocado
Kumquat
Apricots
Watermelon
Raspberries
Strawberries
Tangerine/Clementine

注意:此解决方案允许重复的字符串长度,以便可以按长度对字符串进行排序。但这意味着它还允许重复的字符串值,以便同一个字符串可以出现多次。

关于c++ - 在插入集合 C++ 之前比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30961360/

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