如何创建一个比较器来比较不同的字段。不同的字段可以有不同的类型(uint
或string
)。我应该使用T *
吗?由不同班级成员比较
有必要减少代码长度。
template<typename T>
class ComparatorSelector
{
public:
struct CompareByLabel{
bool operator() (const T & iRight, const T & iLeft)
{
return iRight->m_label > iLeft->m_label;
}
};
struct CompareByHouseNumber{
bool operator() (const T & iRight, const T & iLeft)
{
return iRight->m_houseNumber > iLeft->m_houseNumber;
}
};
//...
};
template< class T, class C, typename W >
class SearchIndex
{
public:
SearchIndex() {}
void Build(std::vector<T> iElems, C iComparator, std::ofstream oStream)
{
std::map< T *, size_t> numbersOfElems;
for(class std::vector<T>::iterator it = iElems.begin(); it != iElems.end(); ++it){
m_elems.insert(&(*it));
numbersOfElems[&(*it)] = m_elems.end - it ;
}
oStream << m_elems.size();
for(class std::multiset< T * >::iterator it = m_elems.begin(); it!= m_elems.end(); ++it)
oStream << numbersOfElems[*it];
m_compareMode = iComparator;
}
//....
}
此代码是否可以编译?通过价值传递,iRight/iLeft是引用,但指针应用? – billz
...这个......比较器返回“更大”的状态,而不是“更小”(是的,这*可能是有目的的,但有些东西告诉我...没有。 – WhozCraig
是的,我需要通过引用传递。在比较器中,我需要传递对象的指针,但问题不在于此。 – YYY