【发布时间】:2020-03-09 18:03:24
【问题描述】:
我有一个包含 5 个单词的向量多次使用,我想要的是实现这个单词顺序:“a,zawodowe,wyzsze,podstawowe,bez wyksztalcenia” 所以我写了这段代码,我想知道它是否是使用排序的最佳方式,或者是否可以跳过其中一个 if 条件
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
std::vector<std::string> v = {"wyzsze", "podstawowe", "zawodowe","podstawowe",
"zawodowe", "bez wyksztalcenia", "zawodowe", "zawodowe", "wyzsze",
"zawodowe", "zawodowe", "wyzsze", "podstawowe", "bez wyksztalcenia",
"wyzsze", "podstawowe", "zawodowe","podstawowe",
"zawodowe", "bez wyksztalcenia", "zawodowe", "zawodowe", "wyzsze",
"zawodowe", "zawodowe", "wyzsze", "podstawowe", "bez wyksztalcenia",
"wyzsze", "podstawowe", "zawodowe","podstawowe",
"zawodowe", "bez wyksztalcenia", "zawodowe", "zawodowe", "wyzsze",
"zawodowe", "zawodowe", "wyzsze", "podstawowe", "bez wyksztalcenia",
"wyzsze", "podstawowe", "zawodowe","podstawowe",
"zawodowe", "bez wyksztalcenia", "zawodowe", "zawodowe", "wyzsze",
"zawodowe", "zawodowe", "wyzsze", "podstawowe", "bez wyksztalcenia", "a" };
//return a>b daje: zawodowe, wyzsze, podstawowe, bez wyksztalcenia, a
std::sort(v.begin(), v.end(), [](std::string a, std::string b){
if(a == "zawodowe" && b == "a") return false;
if(a == "a" && b == "zawodowe") return true;
if(a == "wyzsze" && b == "a") return false;
if(a == "podstawowe" && b == "a") return false;
if(a == "bez wyksztalcenia" && b == "a") return false;
return a>b;
});
for (std::string i: v) {
std::cout << i << std::endl;
}
}
【问题讨论】:
-
这不只是颠倒字母顺序吗?只是
std::sort(v.begin(), v.end(), std::greater)可以吗? -
我希望“a”排在第一位,但我在问题中犯了一个错误,对不起
-
这些词会永远是这 5 个词之一吗?如果不是,则需要更准确地解释排序规则。
-
是的,就是初始化列表中的单词
-
您也可以使用多个 stl algorithms,例如
partition + sort或sort + rotate。虽然这样做可能有点矫枉过正。
标签: c++