一个。将5个名称存储在列表中。允许用户输入每个名称 湾按升序顺序对列表进行排序并打印列表。 C。按降序顺序对列表进行排序并打印列表 d。确保您的代码可以在没有错误或错误的情况下执行。
我坚持按降序排序列表请帮助:(
下面是升序的源代码。
#include <iostream>
#include <set>
#include <algorithm>
void print(const std::string& item)
{
std::cout << item << std::endl;
}
int main()
{
std::set<std::string> sortedItems;
for(int i = 1; i <= 5; ++i)
{
std::string name;
std::cout << i << ". ";
std::cin >> name;
sortedItems.insert(name);
}
std::for_each(sortedItems.begin(), sortedItems.end(), &print);
return 0;
}
答案 0 :(得分:2)
要对列表进行排序,您不需要std::set
,您可以将名称存储在std::vector
中,然后使用标题算法中的函数std::sort
。还有一个带谓词的函数版本,因此您可以使用此谓词反转顺序,指定反向比较。查看sort的文档。还要查看标题功能中定义的greater - 这是一个可用于反转排序顺序的谓词。看看这个short example on ideone:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
int main() {
vector<string> test;
test.push_back("a");
test.push_back("c");
test.push_back("b");
sort(test.begin(), test.end());
for (unsigned i = 0; i < test.size(); ++i) {
cout << test[i] << endl;
}
sort(test.begin(), test.end(), greater<string>());
for (unsigned i = 0; i < test.size(); ++i) {
cout << test[i] << endl;
}
return 0;
}
答案 1 :(得分:1)
要以相反的顺序显示set
,您可以使用:
std::for_each(sortedItems.rbegin(), sortedItems.rend(), &print);