PDA

Показать полную графическую версию : STL и multimap


Crew
31-08-2004, 02:53
В STL в multimap`е есть такая функция

value_compare value_comp( ) const;

//Пример...
* multimap <int, int, less<int> *> m1;
* multimap <int, int, less<int> >::value_compare vc1 = m1.value_comp( );

получить эту функцию *я могу, а задать свою не знаю как.

pva
06-09-2004, 14:25
а какой смысл имеет 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

Crew
14-09-2004, 00:14
Эта функция будет сравнивать ключ, а не значение, ассоциированное с ключом. Разве нет?

pva
05-10-2004, 13:51
Я, честно говоря, сейчас далеко от хелпа нахожусь, поэтому предлагаю эвристический анализ:
Если есть 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);
        }
}

pva
18-11-2004, 12:43
Кажется я понял вопрос.
*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;
}

Crew
28-11-2004, 18:23
И почему это все тут так плохо стало выглядеть? Не могу нормально прочитать




© OSzone.net 2001-2012