17. september 2004 - 22:34
Der er
12 kommentarer og 1 løsning
Hash i c++
Er der noget i C++ som minder om Hash i Perl? Altså hvor mange kan tilgå en Keys værdi ud fra dens navn? Kan I give mig et eksempel?
Annonceindlæg fra Publicis Sapient
17. september 2004 - 22:35
#1
Du kan bruge STL map
17. september 2004 - 22:37
#2
Eksempel: #include <iostream> #include <map> #include <string> using namespace std; class my { public: string s; }; int main() { map<int,my> m; my test; test.s = "abc"; pair<int,my> p(123,test); m.insert(p); string s = m[123].s; cout << s << endl; return 0; }
17. september 2004 - 22:38
#3
Ovenstående bruger int som key og class my som value. Men du kan selvfølgelig lave en string som key også.
17. september 2004 - 22:44
#4
Gide du at give mig et eksempel på det?
17. september 2004 - 23:21
#5
#include <iostream> #include <string> #include <map> std::map<std::string, int>MyMap; int main() { MyMap.insert(std::make_pair("Ole", 12)); MyMap.insert(std::make_pair("Peter", 14)); std::cout << "Ole is: " << MyMap["Ole"] << std::endl; int n = MyMap["Peter"]; std::cout << "Peter is: " << n << std::endl; MyMap["Ole"]++; std::cout << "Ole is now: " << MyMap["Ole"] << std::endl; std::map<std::string, int>::iterator it; for(it = MyMap.begin(); it != MyMap.end(); ++it) std::cout << it->first << " " << it->second << std::endl; }
17. september 2004 - 23:25
#6
Den svarer lidt til Java HashMap og .NET Hashtable.
18. september 2004 - 00:21
#7
Ligger du et svar? Kan du fortælle mig hvordan man ligger en integer til en streng i c++? I java kan man skriver string temp = "Navne"+integer; Hvordan gøres dette i c++?
18. september 2004 - 00:30
#8
Man kan desværre ikke ligge string's sammen med int's i C++. Man bliver nødt til at lave int'en om til en string: #include <iostream> #include <string> #include <sstream> std::string IntToString(int i) { std::stringstream ss; ss << i; return ss.str(); } int main() { std::string Peter = "Peter: "; Peter += IntToString(123); std::cout << Peter << std::endl; }
18. september 2004 - 00:50
#9
Man kan også lave et par operatorer, men det kan være en anelse risikabelt: #include <iostream> #include <string> #include <sstream> template <typename T> std::string &operator += (std::string &s, const T t) { std::stringstream ss; ss << t; s += ss.str(); return s; } template <typename T> std::string operator + (const std::string &s, const T t) { std::stringstream ss; ss << s << t; return ss.str(); } int main() { std::string Peter = "Peter: "; Peter += 123; std::cout << Peter << std::endl; Peter += " "; Peter += 432.123; std::cout << Peter << std::endl; std::string Ole = std::string("Ole ") + 66612; std::cout << Ole << std::endl; }
18. september 2004 - 00:54
#10
Eksemplerne ovenfor virker, men det gør følgende IKKE: std::string Hans = "Hans " + 2;
18. september 2004 - 09:24
#11
Jeg foretrækker altid gode gamle sprintf til den slags: char s[100]; sprintf(s,"%d plus %d giver %d",2,2,2+2);
18. september 2004 - 09:24
#12
26. september 2004 - 23:44
#13
OK ?
Kurser inden for grundlæggende programmering