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