вставка в мультикарту c ++ - PullRequest
0 голосов
/ 01 декабря 2018

Мне дали в классе mutlimap

typedef std::multimap<std::string, size_t, StringLenCmp> wordDictType;

, и мне нужно разработать функцию, которая будет вставлять слово и длину слова в мультикарту.Я знаю, что для традиционной вставки в мультикарту я бы сделал

mmap["one"] = 1; 

или

mmap.insert(make_pair("one", 1)); 

, но я не знаю, что такое StringLenCmp.Это класс

class StringLenCmp {

public:

    StringLenCmp() = default;

    // sort by length first, and then alphabetically
    bool operator()(const std::string& a, const std::string& b) const {
        return (a.size() < b.size()) || (a.size() == b.size() && a < b);
    }

private:
    // no data
};

, но проблема в том, что я понятия не имею, что все это значит.

Может кто-нибудь помочь мне расшифровать все это.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Это функтор для функции сравнения, которая "сортирует" вашу мультикарту.

или просто класс, который содержит перегрузку оператора, так что он определяет, является ли какой-либо из 2 элементов большим или меньшим или равнымдруг друга.

0 голосов
/ 01 декабря 2018

Как вы можете прочитать здесь , std::multimap определяется как

template < class Key,                                     // multimap::key_type
           class T,                                       // multimap::mapped_type
           class Compare = less<Key>,                     // multimap::key_compare
           class Alloc = allocator<pair<const Key,T> >    // multimap::allocator_type
           > class multimap;

Параметр class Compare - это часть, которая по умолчанию сортируется на основе значения ключа по возрастаниюпорядок (less<Key>), но вы можете определить, чтобы выполнить пользовательскую сортировку элементов на карте, и ваш class StringLenCmp делает именно это.Каждый элемент проверяется и сортируется во время вставки.

...