基于另一个分类向量对向量进行分类
Sorting vector based on another sorted vector
我有pair
的vector1
,由int
键排序:
std::vector <pair <int,string> > vector1;
//6 5 1 8 4 2
然后,我还有另一个vector2
,由vector1
中包含的数字组成:
std::vector <string> vector2;
//1 5 6 8
如何用与vector1
相同的键进行vector2
进行排序?我想得到:
unsorted: 1 5 6 8
sorted: 6 5 1 8
unsorted: 6 5 1 2 4
sorted: 6 5 1 2 4
如果vector2由始终出现在vector1中的数字组成,则可以从vector1映射数字,例如vector1是 [3, 2, 4]
,vector2是 [4, 3]
;
- 将所有元素映射到Exampe
3->0, 2->1, 4->2
的索引(密钥是数字,值是索引)。使用地图或哈希图它。 - 现在循环通过vector2,对于每个元素在地图中搜索它,并用映射中的值替换它:
4 becomes 2, 3 becomes 0
因此vector2变为[2, 0]
- 现在使用
sort(vector2.begin(), vector2.end());
vector2变为[0, 2]
- 现在循环通过vector2,对于每个元素,我将其替换为vector1 [i]:
0->3
(因为Vector1中的0索引处的数字为3),因此2->4
(因为Vector1中的第二个索引为4)。希望这会有所帮助。
您可以创建一个值地图,类似于
void SortAccording(std::vector<int>& vec, const std::vector<std::pair<int, string>>& ref)
{
std::map<int, int> m;
int counter = 0;
for (auto& p : ref) {
m[p.first] = counter++;
}
std::sort(vec.begin(),
vec.end(),
[&](int lhs, int rhs) { return m.at(lhs) < m.at(rhs); });
}
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 合并,分类和删除重复分类的向量和未分类的向量
- 试图分类对象的向量
- 双打分类/编辑问题的2D向量
- 使用lambda函数将向量与另一个向量进行分类
- 分类包含数字和单词的字符串向量
- 分类一个向量,该向量由该类中的成员字符串保存对象
- 为什么在对自定义对象的向量进行分类时,我们将在struct的定义中包括比较函数
- 根据没有类或结构的另一个向量的元素对一个向量进行分类
- 如何使用二进制搜索将元素插入分类的向量
- 基于另一个分类向量对向量进行分类
- 在C 中搜索和分类向量
- 在其他班级成员的向量中找到一个分类记录
- 分类向量时的segfault
- 我需要帮助理解如何用C 中的多个字符串对设置或向量进行分类
- 多维向量分类