sirve que pasos para mental mapa hacer estructura esquema ejemplo como caracteristicas c++ stl map std-pair

c++ - pasos - para que sirve un mapa conceptual



Usando el par como clave en un mapa(C++/STL) (4)

Alternativamente a lo que James McNellis declaró:

mapa.insert(std::make_pair(p1, "Manzana"));

puede usar mapa.insert({p1, "Manzana"});

Quiero usar un par de STL como clave de un mapa.

#include <iostream> #include <map> using namespace std; int main() { typedef pair<char*, int> Key; typedef map< Key , char*> Mapa; Key p1 ("Apple", 45); Key p2 ("Berry", 20); Mapa mapa; mapa.insert(p1, "Manzana"); mapa.insert(p2, "Arandano"); return 0; }

Pero el compilador arroja un montón de información ilegible y soy muy nuevo en C y C ++.

¿Cómo puedo usar un par como clave en un mapa? Y, en general, ¿cómo puedo usar cualquier tipo de estructura (objetos, estructuras, etc.) como clave en un mapa?

¡Gracias!


Aquí hay una reescritura de trabajo del código en cuestión:

#include <map> #include <string> class Key { public: Key(std::string s, int i) { this->s = s; this->i = i; } std::string s; int i; bool operator<(const Key& k) const { int s_cmp = this->s.compare(k.s); if(s_cmp == 0) { return this->i < k.i; } return s_cmp < 0; } }; int main() { Key p1 ("Apple", 45); Key p2 ("Berry", 20); std::map<Key,std::string> mapa; mapa[p1] = "Manzana"; mapa[p2] = "Arandano"; printf("mapa[%s,%d] --> %s/n", p1.s.c_str(),p1.i,mapa.begin()->second.c_str()); printf("mapa[%s,%d] --> %s/n", p2.s.c_str(),p2.i,(++mapa.begin())->second.c_str()); return 0; }


Esto es exactamente lo que quieres hacer.

#include<bits/stdc++.h> using namespace std; int main() { map<pair<string, long long int>, string> MAP; pair<string, long long int> P; MAP.insert(pair<pair<string, long long int>, string>(pair<string, long long int>("Apple", 45), "Manzana")); MAP.insert(pair<pair<string, long long int>, string>(pair<string, long long int>("Berry", 20), "Arandano")); P = make_pair("Berry", 20); //to find berry, 20 cout<<MAP[P]<<"/n"; return 0; }


std::map::insert toma un solo argumento: el par clave-valor, por lo que necesitaría usar:

mapa.insert(std::make_pair(p1, "Manzana"));

Debes usar std::string lugar de C en tus tipos. Tal como está ahora, es probable que no obtenga los resultados esperados porque la búsqueda de valores en el mapa se realizará comparando los punteros, no comparando cadenas.

Si realmente desea utilizar cadenas C (que, de nuevo, no debería), entonces necesita usar const char* lugar de char* en sus tipos.

Y, en general, ¿cómo puedo usar cualquier tipo de estructura (objetos, estructuras, etc.) como clave en un mapa?

Debe sobrecargar el operator< para el tipo de clave o usar un comparador personalizado.