基于另一个排序向量对矢量进行排序

时间:2017-09-12 15:41:25

标签: c++ sorting vector

我有一个vector1 pair,按int键排序:

std::vector <pair <int,string> > vector1;
//6 5 1 8 4 2

然后我有另一个vector2vector1中包含的数字组成:

std::vector <string> vector2;
//1 5 6 8

如何使用与vector2中相同的键对vector1进行排序?我想得到:

unsorted: 1 5 6 8
sorted:   6 5 1 8

unsorted: 6 5 1 2 4 
sorted:   6 5 1 2 4

2 个答案:

答案 0 :(得分:0)

您可以创建值的地图,例如

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); });
}

答案 1 :(得分:0)

如果vector2由始终出现在vector1中的数字组成,则可以映射来自vector1的数字,例如vector1为[3, 2, 4]而vector2为[4, 3];

  1. 将所有元素映射到索引3->0, 2->1, 4->2 (键是数字,值是索引)。使用map或hashmap 它。
  2. 现在循环遍历vector2,为每个元素在地图中搜索它并将其替换为map中的值:4 becomes 2, 3 becomes 0所以现在vector2变为[2, 0]
  3. 现在使用sort(vector2.begin(), vector2.end()); vector2变为[0, 2]
  4. 现在循环遍历vector2,对于每个元素,我用vector1 [i]替换它: 0->3(因为vector1中第0个索引处的数字是3),2->4(因为vector1中第2个索引处的数字是4)。 希望这会有所帮助。