【问题标题】:Problem with STL Set comparision classSTL Set 比较类的问题
【发布时间】:2011-06-21 10:46:35
【问题描述】:

我有一组 ID,例如 {3,7,1,5}。当表 [7]

  • 我有一个类(MyClass1),它有两个成员:vector table 和 operator()
  • operator() 返回真,当 table[a]
  • 在另一个类 (MyClass2) 中我设置了 MySet1
  • 我在 MyClass2 的成员中使用 MySet1.insert()

但是...似乎 operator() 无权访问 table,因为 table[a] 或 table[b] 导致段错误,并且 table.size() 始终返回 0(即使 table 不为空当然)。

我该怎么办?

【问题讨论】:

  • 请发布您的源代码。
  • 与其试图描述您的代码,为什么不直接发布您的代码的(相关)部分?
  • 请发布您的代码。从叙述中找出问题所在几乎是不可能的……
  • 不要发布您的代码。创建一个最小的、可编译的、完整的测试用例来说明问题。
  • 在我看来,您的排序无效。容器必须充满所谓的严格弱排序。

标签: c++ class stl set


【解决方案1】:

也许这个小样本有帮助

#include <map>
#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>

typedef int sortkey_t;
typedef std::map<int, sortkey_t> lookup_t;

struct by_sort_lookup
{
    by_sort_lookup(const lookup_t& table) : _table(table) {}

    bool operator()(int a, int b) const
    {
        lookup_t::const_iterator ai = _table.find(a);
        lookup_t::const_iterator bi = _table.find(b);

        if (ai==bi)           return false;
        if (ai==_table.end()) return false; // choose some
        if (bi==_table.end()) return true;  // complementary
        return (ai->second) < (bi->second);
    }
  private:
    const lookup_t& _table;
};

int main()
{
    std::map<int, sortkey_t> sortkey_by_id;

    sortkey_by_id[1] = 70;
    sortkey_by_id[2] = 60;
    sortkey_by_id[3] = 80;

    //
    std::vector<int> ids;
    ids.push_back(1);
    ids.push_back(3);
    ids.push_back(2);

    std::cout << "before sorting: " << std::endl;
    std::copy(ids.begin(), ids.end(), std::ostream_iterator<int>(std::cout, "\r\n"));

    std::sort(ids.begin(), ids.end(), by_sort_lookup(sortkey_by_id));

    std::cout << "after sorting: " << std::endl;
    std::copy(ids.begin(), ids.end(), std::ostream_iterator<int>(std::cout, "\r\n"));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多