【问题标题】:Cplusplus std::set of bidimensional arrayCplusplus std::set 二维数组
【发布时间】:2014-03-24 13:44:20
【问题描述】:

我是 C++ 新手,需要使用 STL 中的 Set,但我对这个概念感到困惑。

我有一个这样的数组int my_data[3]

我想创建(不知道这是否可能)一个set,其空间为 3 个整数,而setkey 将是存储在第一列的int .

我也想做一个自定义排序。

这是我尝试过的,但没有成功。

struct sort_set {
    bool operator() (const int& a, const int& b) const {
        int* arr1 = (int*) a;
        int* arr2 = (int*) b;
        int diff = arr2[1] - arr1[1];
        if (diff) {
            return true;
        } else if (diff == 0) {
            int diff2 = arr2[2] - arr1[2];
            if (diff2) {
                return false;
            }

        }
        return arr1[0] < arr2[0];
    }
};

set<int[3],sort_set> data;

有人能指出正确的方向吗?

【问题讨论】:

  • 您的sort_set 不是严格的弱排序。例如,对于a = {0,1,0}b = {0,2,0},您的sort_set()(a,b)sort_set()(b,a) 都为真。

标签: c++ arrays stdset


【解决方案1】:

您不能将数组作为容器的元素。它们不可分配也不可复制。

如果您有可用的 C++11,请使用 std::array&lt;int, 3&gt;,否则请定义自定义类。

【讨论】:

  • 谢谢。如果我创建一个具有 3 个 int 的类,我如何定义女巫一个是设置键?
  • 您编写了一个自定义比较器(如上所述)并比较您想要的比较器。
  • 您通过迭代器访问元素。但是要获得迭代器,您通常会使用搜索,它也使用比较器。
猜你喜欢
  • 2018-07-02
  • 1970-01-01
  • 2017-03-24
  • 2012-04-05
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
相关资源
最近更新 更多