假设我有一个字符串 vector 列表:
["a", "c", "鸭子"]
["a", "a", "f"]
[“蜜蜂”、“s”、“xy”]
["b", "a", "a"]
我想用这种方式对 vector 进行排序:
首先根据索引为 0 的元素按字典顺序排序,如果有平局,则根据索引 1 的元素按字典序确定,如果有另一个平局,则根据索引的元素按字典序确定索引 2 处的元素。
所以上面的列表排序后会变成这样:
["a", "a", "f"]
["a", "c", "鸭子"]
["b", "a", "a"]
[“蜜蜂”、“s”、“xy”]
如何实现标准库 sort() 函数来编写一个方法来根据上述描述对 vector 列表进行排序?我正在使用 C++。 谢谢。
一旦每个 vector 的长度已知,编写比较函数就不难了。但是如果我不知道 vector 的长度(但我总是知道它们的长度相同)怎么办? 比较长度为 3 的 vector 的函数:
bool CompareVector(vector<string> first, vector<string> second){
if (first[0] < second[0])
return true;
if (first[1] < second[1])
return true;
if (first[2] < second[2])
return true;
return false;
}
所以对于长度为n的 vector ,会有n个if语句。但是我怎样才能将 if 语句的数量保持为一个变量呢?
这个怎么样:
bool CompareVector(vector<string> first, vector<string> second){
for (int i=0; i< first.size(); i++)
if (first[i] < second[i])
return true;
return false;
然后我可以调用标准排序函数:
sort(vector<vector<string> >input.begin(), vector<vector<string> >input.end(), CompareVector() )
这行得通吗?谢谢。
最佳答案
只需调用 std::sort
即可。它对 vector 的每个元素执行字典顺序比较,这是递归的。
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
int main()
{
std::vector<std::vector<std::string>> v{{"a", "c", "duck"},
{"a", "a", "f"},
{"bee", "s", "xy"},
{"b", "a", "a"}};
std::sort(v.begin(), v.end());
for (const auto& v_: v)
{
for (const auto& s : v_)
std::cout << s << " ";
std::cout << std::endl;
}
std::cout << std::endl;
}
输出:
a a f
a c duck
b a a
bee s xy
关于c++ - 根据优先级按字典顺序对 vector 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22155451/