STL集比较类的问题

Problem with STL Set comparision class

本文关键字:问题 比较 STL      更新时间:2023-10-16

我有一个ID集,例如{3,7,1,5}。我希望在1之前有7,当表[7]<表[1]。我是这样做的:

  • 我有一个类(MyClass1),它有两个成员:vector table和operator()
  • 当表[a]<表[b]
  • 在另一个类(MyClass2)中,我已经设置<unsigned int,MyClass1>MySet1
  • 我在MyClass2的成员内部使用MySet1.insert()

但是。。。运算符()似乎无法访问表,因为表[a]或表[b]会导致segfault,而table.size()总是返回0(当然,即使表不为空)。

我该怎么办?

也许这个小样本有助于

#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, "rn"));
    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, "rn"));
}