map & multimap

map в STL - что-то вроде хеша в Perl, иными словами это массив ключом которого может быть любая сущность, а не только цифровой индекс как в обычном массиве.

Для объявления что-то вроде хеша в Perl на C++
map perlHash
теперь можно запросто писать:
perlHash myHash;
myHash["name"] = "Ivan";

Если нужно что-то посложнее в качестве ключа или значения то можно использывать value_type
myHash.insert( map::value_type("name","Ivan"));
Для поиска значения по ключу:
myHash.find("Ivan")

Для map как и для хеша на Perl существует уникальность ключа, т.е.
myHash.insert( map::value_type("name","Ivan"));
myHash.insert( map::value_type("name","Petr"));
не прокатит - вторая конструкция не выполниться.

Но если очень надо, то можно, для этого используют multimap, тут записей с одинаковыми ключами может быть несколько, для поиска списка можно использовать также find, затем в цикле переберать иттераторы пока значение ключа = поисковому и иттератор не равен end();
Например:
multimap not_perlHash;
not_perlHash.insert( multimap::value_type("name","Ivan"));
not_perlHash.insert( multimap::value_type("data","ogo"));
not_perlHash.insert( multimap::value_type("name","Peter"));
not_perlHash.insert( multimap::value_type("zz","zzz"));
multimap::iterator i=not_perlHash.find("name");
while(i!=not_perlHash.end())
{
if (i->first !="name") break;
printf("%s - %s\n",i->first.c_str(),i->second.c_str());
i++;
}

Ну и очевидно из примера что к ключу и данным можно обратиться из иттератора посредством first и second