Отображение `std :: map` - PullRequest
1 голос
/ 10 июня 2010

Ранее объявлена ​​карта:

map<char*,char*>    rtable; // used to store routing information

Теперь я пытаюсь отобразить содержимое карты:

void Routes::viewroutes(){
    typedef map<char*, char*>::const_iterator iter;
    for (iter=rtable.begin(); iter != rtable.end(); ++iter) {
        cout << iter->second << " " << iter->first << endl;
    }
}

Получение сообщения об ошибке «Ожидаемое первичное выражение перед»! = 'token and for' -> 'token. Не могу понять, какую ошибку я здесь делаю. Есть идеи?

Ответы [ 4 ]

4 голосов
/ 10 июня 2010

iter - это тип вашего кода. Должно быть переменной.

typedef map<char*,char*> my_map_t;  // alias for a specialized map

// declare a variable of needed type
my_map_t    rtable;

// declare iter of type my_map_t::const_iterator
for (my_map_t::const_iterator iter=rtable.begin(); iter != rtable.end(); ++iter) {
    cout << iter->second << " " << iter->first << endl;
}
// scope of the iter variable will be limited to the loop above
1 голос
/ 10 июня 2010

Объявить переменную типа iter:

void Routes::viewroutes(){
    typedef map<char*, char*>::const_iterator iter;
    for (iter i =rtable.begin(); i != rtable.end(); ++i) {
        cout << i->second << " " << i->first << endl;
    }
}

Просто для удовольствия :), вы можете использовать следующие функции, которые я написал для потоковой передачи содержимого карты или мультикарты в любой стандартный поток, будь то стандартный вывод, поток файлов. Он работает со всеми типами потоков, например cout или wcout:

    template <class Container, class Stream>
    Stream& printPairValueContainer(Stream& outputstream, const Container& container)
    {
        typename Container::const_iterator beg = container.begin();

        outputstream << "[";

        while(beg != container.end())
        {
            outputstream << " " << "<" << beg->first << " , " << beg->second << ">";
            beg++;
        }

        outputstream << " ]";

        return outputstream;
    }

template
    < class Key, class Value
    , template<class KeyType, class ValueType, class Traits = std::less<KeyType>,
    class Allocator = std::allocator<std::pair<const KeyType, ValueType> > > 
    class Container
    , class Stream
    >
Stream& operator<<(Stream& outputstream, const Container<Key, Value>& container)
{
    return printPairValueContainer(outputstream, container);
}
1 голос
/ 10 июня 2010

Удалить typedef. Вы не объявляете переменную с помощью этого оператора, вы определяете тип, а затем присваиваете ему. Вот в чем ошибка.

0 голосов
/ 10 июня 2010

Я всегда обращаюсь к своим итераторам карты, например, так (* iter) .first и (* iter) .second.

...