c++ - 如何根据第一个 vector 的变化对双 vector 进行排序?

标签 c++ sorting vector

我想实现类似 DoubleVector 的东西。 在这个类中,我还想实现 sort 方法,该方法对 v1_ 进行排序,并且根据 v1_ 的变化,v2_ 中的顺序也会发生变化。 代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
class DoubleVector
{
    vector<int> v1_;
    vector<char> v2_;
public:
    void sort()
    {
        //sort v1_ and also change order in v2_ according to changes in v1_
        std::sort(v1_.begin(), v1_.end() /*, lambda ?*/);
    }
    void add(int value_v1, char value_v2)
    {
        v1_.push_back(value_v1);
        v2_.push_back(value_v2);
    }
    void print()
    {
        const auto size = v1_.size();
        for (size_t i=0;i<size;++i)
        {
            cout << v1_[i] << " " << v2_[i] << endl;
        }
    }
};
int main()
{
    DoubleVector dv;
    dv.add(6, 'g');
    dv.add(2, 'r');
    dv.add(3, 'y');
    dv.add(4, 'a');
    cout << "Before sort:" << endl;
    dv.print();
    dv.sort();
    cout << "After sort:" << endl;
    dv.print();//the values in v2_ are in the same order they don't change order according to v1_ changes
    return 0;
}

如您所见,排序前的 DoubleVector 包含:

6 g
2 r
3 y
4 a

排序后包含:

2 g
3 r
4 y
6 a

我想得到:

2 r
3 y
4 a
6 g

所以第一个 vector v1_ 已经排序,但第二个 vector 仍然有相同的顺序,我想根据 v1_ 的变化更改第二个 v2_ vector 中元素的顺序。 我可以写它,但我想以一种快速而干净的方式来写,也许使用 lambda 作为 std::sort 函数中的第三个参数? DoubleVector 类中的 vector v1_ 和 v2_ 必须保持原样。

非常感谢。

最佳答案

制作 std::pair<int,char> 的 vector 反而。自 operator <在对比较first并决定关于 second 的关系, 排序 std::vector<std::pair<int,char>>将产生您想要的确切效果:

vector<pair<int,char>> v;
v.push_back(make_pair(6, 'g'));
v.push_back(make_pair(2, 'r'));
v.push_back(make_pair(3, 'y'));
v.push_back(make_pair(4, 'a'));
sort(v.begin(), v.end());
for (int i = 0 ; i != v.size() ; i++) {
    cout << v[i].first << " " << v[i].second << endl;
}

Demo.

关于c++ - 如何根据第一个 vector 的变化对双 vector 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910924/

相关文章:

sorting - 更改 FullCalendar 月 View 上的默认事件排序顺序

c++ - 用 const std::vector 包装现有内存?

c++ - 以类似方式处理 std::map<K,V> 和 std::map<K,V*>

c++ - Qt 从 QTextStream 读取

java - 正如 Java 之于 Scala,C++ 之于……?

PHP - 对多维数组进行排序 - 问题

C++ 开关与成员函数指针与虚拟继承

arrays - Perl:自定义排序顺序?

C++ 输入数据到用户定义类型的 vector ?

c++ - 从文件中读取不同数量的变量