【发布时间】:2017-12-06 14:57:36
【问题描述】:
在下面的代码中,出现分段错误。我认为问题出在索引上,但我不明白为什么。是否可以使用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;
}
【问题讨论】:
-
&t1-A.data()看起来不应该用于索引向量 -
你知道
&t1是内存地址吗? -
@tobi303 找到元素 t1 是有意义的。
-
你没有考虑到元素在排序过程中可以移动。
-
真正的目标是什么?是否将索引向量排序到
A向量中,而不必实际对A向量进行排序?如果是这样,则方法不正确。
标签: c++ sorting c++11 vector lambda