zhash_t in std::map konvertieren
English
Deutsch
Problem:
Du hast eine Hash-Datenstruktur, die durch CZMQs zhash_t repräsentiert wird (siehe die zhash_t-Dokumentation für weitere Informationen).
Um sie in C++ bequemer verwenden zu können, beabsichtigst du, besagtes zhash_t in ein std::map<std::string, std::string> zu konvertieren.
Lösung
Dieses Beispiel geht davon aus, dass das zhash_t nur C-Strings als Schlüssel und Werte enthält. Wenn das nicht der Fall ist, kannst du das Beispiel unten an die spezifisch verwendeten Datenstrukturen anpassen.
Du kannst diese Utility-Funktion verwenden, die C++11 emplace-Semantik aus Effizienz- und Lesbarkeitsgründen nutzt:
zhash_to_map.cpp
/*
* zhash_t -> std::map Konvertierungs-Utility
* Geschrieben von Uli Koehler (techoverflow.net)
* Veröffentlicht unter Public Domain
*/
#include <map>
#include <string>
#include <czmq.h>
/**
* Konvertiert ein zhash in ein std::map
* Vorbedingung (nicht geprüft): Jeder Schlüssel und Wert muss einen C-String repräsentieren
*/
inline std::map<std::string, std::string> zhashToMap(zhash_t* hash) {
std::map<std::string, std::string> ret;
zlist_t* headersKeys = zhash_keys (hash);
for(char* key = (char*) zlist_first(headersKeys);
key != NULL;
key = (char*)zlist_next(headersKeys)) {
char* value = (char*)zhash_lookup(hash, key);
ret.emplace(key, value);
}
zlist_destroy(&headersKeys);
return ret;
}Wenn du kein C++11 verwenden kannst, ändere einfach ret-emplace(key, value); in Zeile 21 zu ret[std::string(key)] = std::string(value);.
Check out similar posts by category:
C/C++
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow