LINUX.ORG.RU

std::map от std::pair

 cpp srl


0

1

мне нужен словарь для хранения информации о расстоянии между двумя вершинами графа (вершины заданы их номерами, расстояние - положительное целое)
хотел написать что-то вроде std::map< std::pair<int, int>, int>, для чего первым делом унаследовался от std::pair и перегрузил оператор ==, чтобы не хранить в словаре избыточную информацию (из 1 к 20 вершине это то же самое, что из 20 к 1)
но тут возникла проблема:

std::map< myPair<int, int>, int> map;
myPair<int, int> p1;
p1.first = 10;
p1.second = 20;
myPair<int, int> p2;
p2.first = 20;
p2.second = 10;
// p1 == p2 возвращает true
map[p1] = 100;
// map[p2] == 0
[/cpp]
почему?

map - неподходящая (в таком виде) структура данных для хранения графа. тебе либо adjacence matrix нужна, либо edge list, либо структуру Вирта.

из 1 к 20 вершине это то же самое, что из 20 к 1

только в случае ненаправленного графа.

invy ★★★★★
()
Ответ на: комментарий от invy

только в случае ненаправленного графа.

и в случае когда между двумя узлами существует только одна грань (а может быть и множество - мультиграф).

invy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.