c++ - 根据优先级按字典顺序对 vector 列表进行排序

标签 c++ list sorting vector lexicographic

假设我有一个字符串 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/

相关文章:

java - 基于 3 列对多维数组进行排序

C++ dwarf 标签编号格式

c# - 使用 LINQ 从列表中随机选择一个匹配的字符串

jquery - 使不同的li(父子)具有相同的宽度

python - 如何对 pandas 中的字母数字字段进行排序?

ios - 按键将 NSArray 分成排序的组

C++17 和静态临时生命周期的引用扩展

c++ - 在后台 C++ 程序/bash 脚本中捕获 linux 命令的输出

c++ - windows平台下visual studio C++环境下如何使用xgboost?

list - 使用列表作为变量的 Powershell 命令