STL集比较类的问题
Problem with STL Set comparision class
我有一个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"));
}
相关文章:
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- std::max() 函数与定点实现的比较中的问题
- C++复杂情况的比较器通过参数问题
- 这种比较是否不一致(或者存在其他问题)?
- 将此类数据作为字符串进行比较时出现问题
- 关于没有比较的条件的问题
- 通过比较字符设置字符串时出现问题
- 无符号int的比较始终是正确的(NPOS问题?)
- 比较两个字符的问题
- (C++) 学习向量 - 编码/输入流终止/比较向量的问题
- C++ lower_bound比较功能问题
- 比较答案键(C )的字符串的问题
- C++ std:字符串比较编纂问题
- 比较字符串(arduino)时出现问题
- 将 char * 与字符串文本进行比较时出现问题
- MAP和比较类别的C 问题
- 排序功能不起作用(字符串比较问题)
- 使用比较运算符和字符串比较函数读取文本文件的子部分时出现问题
- 使用具有自定义比较类型的关联容器时出现的问题