将数组存储在向量中并对元素进行排序[关闭]
Posted
技术标签:
【中文标题】将数组存储在向量中并对元素进行排序[关闭]【英文标题】:store array in vectors and sort the elements [closed] 【发布时间】:2014-04-21 17:07:54 【问题描述】:我有一个巨大的数字列表,由三个组合,
有没有办法将这些数字作为一个单元存储在一个向量中,并对它们进行排序以进行打印,以便根据第一个数字对组合进行排序,如果碰巧有重复,那么它们会根据第二个数字,依此类推。
这是一个输入示例:
234 567 234 234 123 678 234 123 465 567 890 123对于预期的输出:
234 123 465 234 123 678 234 567 234 567 890 123【问题讨论】:
std::vector<std::vector<int>>
也许?
- 234 567 234 - 234 123 678 - 234 123 465 - 567 890 123 .....说这些是输入。输出应该是 - 234 123 465 - 234 123 678 - 234 567 234 - 567 890 123 .....
你自己试过什么代码?似乎是一个带有 std::sort 和自定义比较器的二维向量?
对于排序,请参见例如std::sort
.
或std::vector<std::tuple<int, int, int>>
。是的,有很多方法。你试过什么?
【参考方案1】:
你基本上需要一个二维整数向量,然后你可以使用 std::sort 和自定义比较器。
bool vector_cmp(const vector<int> &v1, const vector<int> &v2)
for (vector<int>::size_type i = 0; i < v1.size(); ++i)
if (v1.at(i) < v2.at(i))
return true;
else if (v2.at(i) < v1.at(i))
return false;
return false;
vector<vector<int> > int2dVector;
// Append your internal vector in here
int2dVector << ... << ... << ...;
std::sort(int2dVector.begin(), int2dVector.end(), vector_cmp);
你也可以像这样简单地写最后一行:
std::sort(int2dVector.begin(), int2dVector.end());
原因是 operator< 已经存在用于比较向量。
操作 、= 的行为就像使用算法 lexicographical_compare 一样,该算法使用运算符
免责声明:它完全未经测试,仅概念验证代码。
【讨论】:
它是否适用于组合键的数量增加的情况,比如从三个到四个或五个......??组合键的数量是用户输入.. @user3314983:是的,事实上,它比元组更灵活。 内部向量是否只存储一个整数值......??我无法理解..你能解释一下吗.. 请阅读std::vector和std::sort。 @Jarod42:好点,已更新。我使用了 myfunction,因为这也是手册使用的。 :) 我之前也在考虑 const 引用,但我的懒惰赢了。 :P【参考方案2】:定义合适的比较函数的一种简单方法是使用返回负数、零或正数的compare函数。例如。 std::string::compare
就是其中之一。
另一种方法是使用std::lexicographic_compare
。
例如,
struct Triple
double values[3];
;
bool operator<( Triple const& a, Triple const& b )
return std::lexicographic_compare(
&a.values[0], &a.values[0] + 3,
&b.values[0], &b.values[0] + 3
);
void foo()
vector<Triple> triples = ...;
sort( triples.begin(), triples.end() );
【讨论】:
以上是关于将数组存储在向量中并对元素进行排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章