将数组存储在向量中并对元素进行排序[关闭]

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() );

【讨论】:

以上是关于将数组存储在向量中并对元素进行排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我如何按类属性对C++向量数组进行排序[重复]

让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出

对多个数组进行排序和切片[关闭]

js 数组 数据去重排序

我想对数组的元素进行排序[关闭]

有没有办法访问/取消引用并查找存储在双指针向量中的元素的值? [关闭]