Показать полную графическую версию : STL и multimap
В STL в multimap`е есть такая функция
value_compare value_comp( ) const;
//Пример...
* multimap <int, int, less<int> *> m1;
* multimap <int, int, less<int> >::value_compare vc1 = m1.value_comp( );
получить эту функцию *я могу, а задать свою не знаю как.
а какой смысл имеет less<int>? а если написать
struct my_compare : public binary_function<int,int,int> {
int operator()(int a,int b) {
cout << "my compare" << endl;
return std::max(a,b)<100;
}
};
Исправлено: hasherfrog, 10:17 14-09-2004
Эта функция будет сравнивать ключ, а не значение, ассоциированное с ключом. Разве нет?
Я, честно говоря, сейчас далеко от хелпа нахожусь, поэтому предлагаю эвристический анализ:
Если есть map<class Key, class Value, class CompareKey>, и нет
class CompareValue, тогда скорее всего используется
Value::operator<(...). А если его задать?
Никогда с мультимапом не работал, поэтому не понимаю, зачем он нужен. Когда мне нужно было дерево мапов, я делал так:
class assoc_tree;
class assoc_tree : public map<string, auto_ptr<assoc_tree> > {
public:
void accept(const string* begin, const string* end) {
if (begin!=end) {
value_type& v(operator[](*begin).second.get());
if (!v.second.get()) {
v.second.reset(new accos_tree());
}
v.second.accept(begin+1, end);
}
}
Кажется я понял вопрос.
*map<class A,class B>::iterator - это pair<A,B>, есть A::operator<().
Значит:
static map<class A,class B>::value_compare(const value& a, const value& b)
{
return !((a.first<b.first) || (b.first<a.first)) && a.second==b.second;
}
И почему это все тут так плохо стало выглядеть? Не могу нормально прочитать
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.