我几乎没有数据类型相同的向量。
v < int > = {5,4,1,2}
v2 < int > = {2,4,3,5,1,6,8,7}
v3 < int > = {1,4,2,3}有任何方法来排序向量v2,v3 .关于向量v using STL of C++(algorithm),所以
排序后,v2按v排序时为{5,4,1,2,3,6,7,8},而v3按v排序时为{4,1,2,3}。
Edit:对某些人来说,这可能还不清楚。让我解释一下..。
排序向量有两个部分,一个是A,另一个是B。
A包含向量v的元素,即A是v的子集,它遵循与v中相同的顺序
B包含给定向量(v_i- A}的剩余元素{v_i-A},并对其进行排序.
因此,对于向量v2,排序后,它将是
v2 = A union B
A = {5,4,1,2}
B = {3,6,7,8} 发布于 2014-09-24 20:30:45
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));工作实例。提高效率是留给读者的练习(提示:查看std::find调用)。
发布于 2014-09-25 12:58:05
您只需要使用以下规则来增强比较功能:
如果这些条件都不成立,那么现有的比较逻辑就会运行。
https://stackoverflow.com/questions/26025234
复制相似问题