Как я могу скопировать реверс карты на другую карту? - PullRequest
2 голосов
/ 09 марта 2012

Например, map1 передает значения от 1 до 10 с некоторым адресом (от начала до конца).я хочу иметь значения 10 к 1 с соответствующим адресом в map2 (от начала до конца)

map<long , int* > v;
map<long , int* > rv;

int i,a[10];
for(i=0; i<10; i++)
{
a[i] = i+1;
v.insert(pair<long, int *>(i+1,&a[i]));
}
itr = v.begin();
while(itr != v.end())
{
 cout << itr->first << " "<<itr->second;
 cout << endl;
 itr++;
}
rv.insert(v.rbegin(),v.rend());
cout << "copied array: "<<endl;
itr = rv.begin();
while(itr != rv.end())
{
cout << itr->first << " "<<itr->second;
cout << endl;
itr++;
 }

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

Ответы [ 3 ]

8 голосов
/ 09 марта 2012

STL карта - это заказанный контейнер.Порядок элементов, которые вы получаете во время итерации, не зависит от порядка, в котором вы вставляете элементы в контейнер.

Порядок итерации определяется двумя вещами:

  • Значение ключа и
  • Класс Compare, переданный в качестве параметра шаблона в map

Вы можете выполнить итерацию карты в обратном порядке (ваш фрагмент кода показываетчто ты уже знаешь как это делается).Потеря производительности за обратную итерацию карты, если таковая имеется, незначительна.Вы также можете указать нестандартный Compare (std::greater<long> вместо стандартного std::less<long>), чтобы изменить порядок итерации по умолчанию.

1 голос
/ 09 марта 2012

Это невозможно, потому что std::map является заказанным ассоциативным контейнером. Если вы хотите сохранить порядок вставки, используйте другие контейнеры, такие как std::list или std::vector.

0 голосов
/ 09 марта 2012

Карты сортируются по возрастанию значения (в соответствии с оператором <), поэтому независимо от способа вставки элементов они будут возвращены в отсортированном порядке.Вы, конечно, делаете вставку в обратном порядке, но каждый размещенный элемент должным образом сортируется в правильном порядке возрастания.</p>

...