我想实现类似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;
}
正如您在sort之前看到的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
所以第一个向量v1_已经被排序,但第二个向量仍然具有相同的顺序,我想根据v1_的变化改变第二个v2_向量中元素的顺序。 我可以写它,但我想以快速和干净的方式做到这一点,也许在std :: sort函数中使用lambda作为第三个参数? DoubleVector类中的向量v1_和v2_必须保持不变。
非常感谢。
答案 0 :(得分:3)
改为制作std::pair<int,char>
的向量。由于该对上的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;
}
答案 1 :(得分:2)
您可以这样做: -
vector< pair<int,char> >v;
//do what you want
sort(v.begin(),v.end())
默认情况下,排序功能会根据第一个值进行排序,但您始终可以根据排序的工作条件进行定义
答案 2 :(得分:0)
尝试以下方法。
它的工作方式是仅基于int向量值对位置键对进行排序,然后使用此排序来提取值。
std::tuple<std::unit8_t, std::unit8_t, std::unit8_t > rgb(0,0,0);