Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   STL и multimap (http://forum.oszone.net/showthread.php?t=29418)

Crew 31-08-2004 02:53 203842

В 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 203843

а какой смысл имеет 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;
   }
};


[s]Исправлено: hasherfrog, 10:17 14-09-2004[/s]

Crew 14-09-2004 00:14 203844

Эта функция будет сравнивать ключ, а не значение, ассоциированное с ключом. Разве нет?

pva 05-10-2004 13:51 203845

Я, честно говоря, сейчас далеко от хелпа нахожусь, поэтому предлагаю эвристический анализ:
Если есть 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 273787

Кажется я понял вопрос.
*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 276157

И почему это все тут так плохо стало выглядеть? Не могу нормально прочитать


Время: 11:18.

Время: 11:18.
© OSzone.net 2001-