使用lambda函数使用另一个向量对向量进行排序

时间:2017-12-06 14:57:36

标签: c++ sorting c++11 vector lambda

在下面的代码中,我得到了分段错误。我认为问题在于索引,但我不明白为什么。是否可以使用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;
}

1 个答案:

答案 0 :(得分: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,这是我认为你想要的。

希望这有帮助。