vendredi 6 mars 2015

How can I sort std::map by a property of the values?

I have:



struct range {
int origin;
size_t length;
};
using header_map = map<string, range>;
header_map headers = {
{kCONTENT_LENGTH, {0, kCONTENT_LENGTH.length()}},
{kSCGI, {-1, kSCGI.length()}},
{kSERVER_SOFTWARE, {-1, kSERVER_SOFTWARE.length()}},
{kSERVER_NAME, {-1, kSERVER_NAME.length()}},
{kGATEWAY_INTERFACE, {-1, kGATEWAY_INTERFACE.length()}},
{kSERVER_PROTOCOL, {-1, kSERVER_PROTOCOL.length()}},
{kSERVER_PORT, {-1, kSERVER_PORT.length()}},
{kREQUEST_METHOD, {-1, kREQUEST_METHOD.length()}},
{kPATH_INFO, {-1, kPATH_INFO.length()}},
{kPATH_TRANSLATED, {-1, kPATH_TRANSLATED.length()}},
{kSCRIPT_NAME, {-1, kSCRIPT_NAME.length()}},
{kQUERY_STRING, {-1, kQUERY_STRING.length()}},
{kREMOTE_HOST, {-1, kREMOTE_HOST.length()}},
{kREMOTE_ADDR, {-1, kREMOTE_ADDR.length()}},
{kAUTH_TYPE, {-1, kAUTH_TYPE.length()}},
{kREMOTE_USER, {-1, kREMOTE_USER.length()}},
{kREMOTE_IDENT, {-1, kREMOTE_IDENT.length()}},
{kCONTENT_TYPE, {-1, kCONTENT_TYPE.length()}},
};


And I want to sorte an instance of header_map by range.origin. I've tried using lambdas but just calling std::sort on header_map causes clang to throw a strop.


Any help?


Aucun commentaire:

Enregistrer un commentaire