Comment passer d'une structure à une STL carte?
typedef struct
{
pthread_t threadId;
int acceptSocketD;
char *message;
} threadData;
map <unsigned int, threadData> serverPortNumberThreadId;
map <unsigned int, threadData> :: iterator serverPortNumberThreadIdIter;
utilisation:
threadData obj;
obj.threadId = 0;
obj.acceptSocketD = 0;
obj.message = "Excuse Me, please!";
serverPortNumberThreadId.insert (3490, obj);
erreur:
error: no matching function for call to ‘std::map<unsigned int, threadData>::insert(int, threadData&)’
/usr/include/c++/4.5/bits/stl_map.h:500:7: note: candidates are: std::pair<typename std::map<_Key, _Tp, _Compare, _Alloc>::_Rep_type::iterator, bool> std::map<_Key, _Tp, _Compare, _Alloc>::insert(const std::map<_Key, _Tp, _Compare, _Alloc>::value_type&) [with _Key = unsigned int, _Tp = threadData, _Compare = std::less<unsigned int>, _Alloc = std::allocator<std::pair<const unsigned int, threadData> >, typename std::map<_Key, _Tp, _Compare, _Alloc>::_Rep_type::iterator = std::_Rb_tree_iterator<std::pair<const unsigned int, threadData> >, std::map<_Key, _Tp, _Compare, _Alloc>::value_type = std::pair<const unsigned int, threadData>]
/usr/include/c++/4.5/bits/stl_map.h:540:7: note: std::map<_Key, _Tp, _Compare, _Alloc>::iterator std::map<_Key, _Tp, _Compare, _Alloc>::insert(std::map<_Key, _Tp, _Compare, _Alloc>::iterator, const std::map<_Key, _Tp, _Compare, _Alloc>::value_type&) [with _Key = unsigned int, _Tp = threadData, _Compare = std::less<unsigned int>, _Alloc = std::allocator<std::pair<const unsigned int, threadData> >, std::map<_Key, _Tp, _Compare, _Alloc>::iterator = std::_Rb_tree_iterator<std::pair<const unsigned int, threadData> >, std::map<_Key, _Tp, _Compare, _Alloc>::value_type = std::pair<const unsigned int, threadData>]
tcpClient.cpp: In function ‘int main(int, char**)’
Juste une remarque, à l'aide de
Pensez à utiliser
Quelqu'un mélange de C et de C++...
et -1 pour clairement ne pas prendre la peine de lire la documentation de
normalement C++, vous serait tout simplement écrire
typedef
de nom de la structure est inutile en C++.Pensez à utiliser
std::string
au lieu de char*
. Si vous allouer dynamiquement de la mémoire pour message
vous devez écrire le constructeur de copie, opérateur d'affectation et destructeur pour threadData
.Quelqu'un mélange de C et de C++...
et -1 pour clairement ne pas prendre la peine de lire la documentation de
std::map::insert
normalement C++, vous serait tout simplement écrire
struct threadData { ... };
. En C, si tu fais ça alors pour désigner le type que vous avez à utiliser struct threadData
. Cependant, C++ permet de faire référence au type threadData
même sans la définition de type.
OriginalL'auteur Aquarius_Girl | 2012-01-10
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'une paire pour le
insert
fonction, parce qu'en commun avec d'autres conteneursinsert
prend lavalue_type
, qui, dans le cas demap
est une paire, chaque entrée a une clé et d'une valeur mappée. Levalue_type
représente une entrée dans le conteneur et donc comprend à la fois.Vous pouvez écrire
serverPortNumberThreadId[3490] = obj;
au lieu de cela, si vous préférez le look. Le comportement est parfois différente (insert
ne fait rien si la clé existe déjà, alors que ce code remplace, mais à moins que vous êtes en s'appuyant sur le comportement deinsert
déjà cela ne fait aucune différence pour vous). Les performances peuvent être légèrement différentes en termes de nombre dethreadData
les objets créés ou copiés/affecté.x.insert (11, 12);
Bien, cette question mérite downvotes.OriginalL'auteur Steve Jessop
Vous avez besoin d'insérer la valeur dans la carte:
Pour d'autres façons d'insérer dans la carte, voir le map::insert() page de référence.
Pas de. La carte de la valeur est une paire. Lors de l'insertion d'éléments dans une carte, vous devez insérer une paire si vous utilisez le 1er insérer à partir de la page. Si vous utilisez la 2ème ou 3ème d'insertion, vous n'avez pas besoin d'une paire.
et dans ce lien, deux façons d'insérer des éléments ont été montré. La paire est nécessaire lorsque vous devez insérer deux choses à la place de l'un. Ma structure est un objet, pas sûr de savoir pourquoi il a besoin d'une paire?
VJovic Dans mon dernier commentaire ci-dessus ou alors j'ai manqué un point?
En fait, que des liens montre 3 façons d'insérer des éléments dans la carte. La carte de la valeur est de type std::pair< key, value >. Lors de l'utilisation de la 1ère insérez, vous avez besoin pour créer une paire, d'où le 1er élément de la clé, et le 2ème est la valeur (de l'objet dans votre exemple)
OriginalL'auteur BЈовић
votre réponse prend beaucoup plus de détails. Grand.
Que vouliez-vous dire?
OriginalL'auteur BruceAdi
Vous devez envoyer un
pair
pour insérer une fonction et paskey,value
.OriginalL'auteur Shamim Hafiz