如何創建一個比較器來比較不同的字段。不同的字段可以有不同的類型(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