Avatar billede krukken Juniormester
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?
Avatar billede arne_v Ekspert
17. september 2004 - 22:35 #1
Du kan bruge STL map
Avatar billede arne_v Ekspert
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;
}
Avatar billede arne_v Ekspert
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å.
Avatar billede krukken Juniormester
17. september 2004 - 22:44 #4
Gide du at give mig et eksempel på det?
Avatar billede bertelbrander Novice
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;

}
Avatar billede arne_v Ekspert
17. september 2004 - 23:25 #6
Den svarer lidt til Java HashMap og .NET Hashtable.
Avatar billede krukken Juniormester
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++?
Avatar billede bertelbrander Novice
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;
}
Avatar billede bertelbrander Novice
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;
}
Avatar billede bertelbrander Novice
18. september 2004 - 00:54 #10
Eksemplerne ovenfor virker, men det gør følgende IKKE:

std::string Hans = "Hans " + 2;
Avatar billede arne_v Ekspert
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);
Avatar billede arne_v Ekspert
18. september 2004 - 09:24 #12
Avatar billede arne_v Ekspert
26. september 2004 - 23:44 #13
OK ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester