C++ 如何将一个向量相对于另一个向量排序?
我有几个向量的数据类型与C++ 如何将一个向量相对于另一个向量排序?,c++,sorting,vector,stl,stl-algorithm,C++,Sorting,Vector,Stl,Stl Algorithm,我有几个向量的数据类型与 v < int > = {5,4,1,2} v2 < int > = {2,4,3,5,1,6,8,7} v3 < int > = {1,4,2,3} 对一些人来说,这可能还不清楚。 让我解释一下。 排序向量有两部分,一部分是A,另一部分是B。 A包含向量v的元素,即A是v的子集,其顺序与v中的顺序相同 B包含给定向量(v_i)的剩余元素{v_i-A},并对其进行排序。 所以对于向量v2,在排序之后 v2 =
v < int > = {5,4,1,2}
v2 < int > = {2,4,3,5,1,6,8,7}
v3 < int > = {1,4,2,3}
对一些人来说,这可能还不清楚。
让我解释一下。排序向量有两部分,一部分是A,另一部分是B。
A包含向量v的元素,即A是v的子集,其顺序与v中的顺序相同
B包含给定向量(v_i)的剩余元素{v_i-A},并对其进行排序。
所以对于向量v2,在排序之后
v2 = A union B
A = {5,4,1,2}
B = {3,6,7,8}
类比较{
公众:
奇异比较(const向量&排序):排序uz(排序){}
布尔运算符()(整数a,整数b)常量{
自动索引_a=find(排序_u.begin(),排序_u.end(),a);
自动索引_b=find(排序_u.begin(),排序_u.end(),b);
返回make_对(索引a,a)
。提高效率是留给读者的一项练习(提示:查看
std::find
调用)。您只需要使用以下规则扩充比较函数:
如果这些条件都不成立,现有的比较逻辑将运行。注意,这里没有STL,也没有头
算法.h
。现在还不完全清楚(至少对我来说)您在这里想要实现什么。你将A与B进行排序是什么意思(无论A和B的值是多少)?检查它是否存在@user3919801应该是,而不是算法.h
。你的描述仍然清晰的像秋天的伦敦雾。@ WooCurig更新,它在旧编译器中:PIT在旧编译器中不工作,比C++ 11少。即它在C++ 11中工作。检查这里,我尝试将auto更改为int,但仍然不起作用。它不应该是int
-使其成为vector::const\u迭代器
v2 = A union B
A = {5,4,1,2}
B = {3,6,7,8}
class StrangeComparison {
public:
StrangeComparison(const vector<int>& ordering) : ordering_(ordering) {}
bool operator()(int a, int b) const {
auto index_a = find(ordering_.begin(), ordering_.end(), a);
auto index_b = find(ordering_.begin(), ordering_.end(), b);
return make_pair(index_a, a) < make_pair(index_b, b);
}
private:
const vector<int>& ordering_;
};
sort(v2.begin(), v2.end(), StrangeComparison(v));