std::map сортиране по данни?

Има ли начин да сортирате std::map по данните, а не по ключа? В момента моят код дублира цялата карта в масив само за да направи това.


person Jookia    schedule 21.10.2010    source източник
comment
Предполагам, че имате нужда от друга карта с обърнат ключ/стойност?   -  person Daniel Mošmondor    schedule 22.10.2010
comment
Също така не намерих добро решение. Не можете просто да размените картата (както предполагат мнозина), защото две стойности могат да бъдат еднакви, създавайки нова карта, която може да има по-малко елементи. Всъщност е невъзможно да сортирате карта по стойност, тъй като картата се сортира по ключ (затова е бърза). Дори ако се опитате да създадете нова карта, която е сортирана, като вкарате стойностите като вектор, пак ще получите карта, която е сортирана по ключ!!! Начинът, по който внедрих в моя код, беше да създам сортирани вектори за всеки от ключовете и стойностите и използвах векторите в моето приложение. За да направя векторите, първо аз   -  person ryanmartinneutrino    schedule 03.07.2013
comment
Възможен дубликат на STL карта--› сортиране по стойност?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 01.01.2017
comment
Възможен дубликат на Sorting std::map using value   -  person Baum mit Augen    schedule 01.03.2019


Отговори (1)


Доколкото си спомням, std::map ще ви даде итератора, който ще премине през елементите, сортирани по ключа. Единственият начин да преминете през сортираните елементи по стойност и да продължите да използвате картата е да пренапишете цялата колекция в друга карта, като ключът и стойността са обърнати.

person Daniel Mošmondor    schedule 22.10.2010
comment

Използвам приставката surround.vim от дълго време, но не и плъгина rails.vim. Оказва се, че плъгинът rails.vim добавя функционалност към surround.vim или го подкрепя. Така или иначе, накарах го да работи по следния начин:

  1. Инсталирайте плъгина rails.vim, ако още не е, и отворете ERB документ. Vim трябва да го разпознае като eruby файлов тип.
  2. Ако не използва :set filetype=eruby Return, за да накара Vim да вижда нещата по вашия начин.
  3. Изберете визуално текст, който искате да обвиете с ERB етикетите, като използвате v или V.
  4. Натиснете S= или S-. (Това е главно S)
  5. Избраният текст трябва да бъде обвит в блок <%= %> или <%- %>.

Току-що потвърдих, че това работи и в режим на избор на колона.

Това е документирано в помощта за rails.vim: от търсенето в команден режим за :h rails-surround. И ако нямате налична помощ за rails.vim, това е защото инструкциите не са спазени за инсталирането му:

:helptags ~/.vim/doc

Приставката rails.vim изисква също и приставката surround.vim, така че тя трябва да бъде предварително инсталирана. Използвам функционалността на този плъгин поне веднъж в минута, когато редактирам. Това скали.

- person Jookia; 22.10.2010
comment
Ако го направите, ще загубите информацията за двойката ключ-стойност. - person Peter Lee; 25.06.2013
comment
Посочвам отговора на Oli Charlesworth на stackoverflow.com/a/5056797/158371 - person Christian Severin; 03.12.2013