В C ++ 03 я хотел бы создать std :: set, где при итерации сначала следует одно целое число, после чего мне все равно, какой порядок, но мне нужен порядок, чтобы убедиться, что в задавать. Например, если у меня был набор лет, и при итерации я хочу, чтобы 2010 год обрабатывался раньше всех остальных лет.
std::set<int> years;
// I do not know the set of years up front, so cannot just make a vector, plus
// there could potentially be duplicates of the same year inserted more than
// once, but it should only appear once in the resultant set.
years.insert(2000);
years.insert(2001);
years.insert(2010);
years.insert(2011);
years.insert(2013);
for (std::set<int>::iterator itr = years.begin(); itr != years.end(); ++itr) {
process_year(*itr);
}
По сути, мне нужно предоставить компаратор, для которого некоторый год, известный во время выполнения (например, 2010), сравнивается меньше, чем все другие годы, но оставшиеся годы упорядочены, но не в каком-либо необходимом порядке, просто приказано не допускать дублирования в задавать.
struct Comparer
{
int val;
Comparer(int v):val(v) {}
bool operator()(int lhs, int rhs) const {
if (rhs == val) return false;
if (lhs == val) return true;
return lhs < rhs;
}
};
Чтобы создать экземпляр std::set
что заказы на основе Comparer
:
std::set<int, Comparer> instance( Comparer(2010) );
struct my_compare {
my_compare(int y) : allw_less(y) {}
bool operator() (const int& lhs, const int& rhs) const{
if(rhs == allw_less)
return false;
if(lhs == allw_less)
return true;
else
return lhs < rhs;
}
private:
int allw_less;
};typedef std::set<int, my_compare> setType;
setType years(my_compare(2010));