2010-12-21 20 views
3

Hier ist meine Karte:HowTo sortieren std :: map?

typedef std::map<int/*security id*/, PositionMonth> PortfolioMonth; 

wo PositionMonth eine Struktur ist, ex .:

struct PositionMonth 
     { 
      Nav::Shares shares_; 
      Nav::Amount market_value_; 

      PositionMonth(void) 
       {} 
      PositionMonth(const Nav::Amount& market_value 
        , const Nav::Shares& shares) 
       : market_value_(market_value) 
       , shares_(shares) 
       {} 
     }; 

Frage: Wie std::map durch den zweiten Wert Taste Param sortieren (von market_value_, lassen Sie es sein int)? Beispiele oder Links?

PS. Boost-Methoden nicht interessiert!

PPS. Ich kann meine Std :: Map nicht mit compare funktor initialisieren!

Vielen Dank für Ihre Hilfe!


Meine Lösung (oder wie ich habe es selbst):

template<class T> 
    struct LessSecondCcy 
     : std::binary_function<T,T,bool> 
    { 
     inline bool operator()(const T& _left, const T& _right) 
     { 
      return _left.second.market_value_.currency() < _right.second.market_value_.currency(); 
     } 
    }; 

und in der Funktion:

typedef std::pair<int/*security id*/, _Entry> data_t; 

wo _Entry ist PositionMonth

std::vector<data_t> vec(item.funds_end_.begin(), item.funds_end_.end()); 
std::sort(vec.begin(), vec.end(), Nav::LessSecondCcy<data_t>()); 

Fertig!

Antwort

2

Es gibt several options gamedev.net. Sieh dir den Thread für den Beitrag von Fruny an.

Nebenbei: Warum würden Sie Boost nicht als möglichen Lösungsanbieter betrachten? Es ist eine angesehene, von Experten evaluierte, gut dokumentierte Lösung für professionelle C++ - Programmierer.

+0

STL muss die Arbeit machen, denke ich. PS. Neben zusätzlichen beinhaltet - auf keinen Fall. Vielen Dank! – mosg

+0

Danke, Tony, dieser Link hat meine Frage gelöst! Übrigens, ich hatte gegoogelt und Live-Tab mit genau diesem Link geöffnet, während begann, meine Frage auf SO zu posten ... Ich habe 'std :: map' in den' std :: vector' eingefügt und sortiere total diese Hündin! - WoW: D – mosg

1

Vielleicht geben Sie den Beispielcode in cplusplus.com artile auf std :: map Konstruktor die Klarstellung, die Sie suchen!

EDIT: Die fifth Karte, die im Beispielcode im obigen Link instanziiert wird, zeigt Ihnen, wie Sie das Komparatorobjekt ändern.

+0

arumug Ich frage mich, wie 'vierte' und' fünfte' Objekte füllen? – mosg

+0

@mosg: Aus dem Beispielcode werden "viertes" und "fünftes" unter Verwendung des expliziten Standardkonstruktors konstruiert. 'fünftes' gibt das Vergleichsobjekt an, während es den Standardwert für den Zuordner annimmt. So haben sowohl der vierte als auch der fünfte keine Objekte. – yasouser

Verwandte Themen