使用lambda函数将向量与另一个向量进行分类
Sort a vector with another vector using lambda function
在下面的代码中,我会得到分割故障。我认为问题是索引,但我不明白为什么。是否可以使用 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
,这是我认为您想要的。
希望这会有所帮助。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 合并,分类和删除重复分类的向量和未分类的向量
- 试图分类对象的向量
- 双打分类/编辑问题的2D向量
- 使用lambda函数将向量与另一个向量进行分类
- 分类包含数字和单词的字符串向量
- 分类一个向量,该向量由该类中的成员字符串保存对象
- 为什么在对自定义对象的向量进行分类时,我们将在struct的定义中包括比较函数
- 根据没有类或结构的另一个向量的元素对一个向量进行分类
- 如何使用二进制搜索将元素插入分类的向量
- 基于另一个分类向量对向量进行分类
- 在C 中搜索和分类向量
- 在其他班级成员的向量中找到一个分类记录
- 分类向量时的segfault
- 我需要帮助理解如何用C 中的多个字符串对设置或向量进行分类
- 多维向量分类