2011-06-21 51 views
0

我有一组ID,例如{3,7,1,5}。我希望在1之前有7个表格[7] <表格[1]。我已经做到了这种方式:STL设置比较类的问题

  • 我有一个类(MyClass1的),其中有两个成员:量表和运营商()
  • 运营商()返回true,当表[A] <表[ b]
  • 在另一个类(MyClass2)我已成立< unsigned int类型,MyClass1的>我的设定1
  • 我用MySet1.insert()MyClass2
  • 成员

但里面......看来,运营商( )无法访问表,因为使用table [a]或table [b]会导致段错误,并且table.size()总是返回0(即使table当然不是空的)。

我该怎么办?

+2

请把你的源代码。 –

+0

而不是试图描述你的代码,为什么不只是发布你的代码(的相关)部分? –

+1

请发布您的代码。它几乎不可能找出叙述中的错误。 – StevieG

回答

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