使用lambda函数将向量与另一个向量进行分类

Sort a vector with another vector using lambda function

本文关键字:向量 分类 另一个 函数 使用 lambda      更新时间:2023-10-16

在下面的代码中,我会得到分割故障。我认为问题是索引,但我不明白为什么。是否可以使用 std::sort和lambda函数根据另一个向量对向量进行分类?

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
int main()
{
    std::vector<std::string> A = {"b", "a", "c"};
    std::vector<int> B = {2, 1, 3};
    std::sort(std::begin(A), std::end(A),
            [&](const std::string& t1, const std::string& t2)
            {
            return B[&t1-A.data()] > B[&t2-A.data()]; // problem could be here!
            });
    std::cout << A[0] << std::endl;
    std::cout << A[1] << std::endl;
    std::cout << A[2] << std::endl;
    return 0;
}

,而不是以自己的方式获取索引来做简单的方法。

std::sort(std::begin(A), std::end(A),
        [&](const std::string& t1, const std::string& t2)
        {
          int index1, index2;
          for(int i = 0; i<A.size(); i++) {
            if(&A[i] == &t1) index1 = i;
            if(&A[i] == &t2) index2 = i;
          }
        return B[index1] > B[index2];
        });

这种方式是安全的,并确保其获得正确的索引。测试后,输出为C n B n A,这是我认为您想要的。

希望这会有所帮助。