2011-06-21 64 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")); 
}