Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[map]poprawna osbługa

Ostatnio zmodyfikowano 2015-11-01 22:45
Autor Wiadomość
txter
Temat założony przez niniejszego użytkownika
[map]poprawna osbługa
» 2015-11-01 21:59:41
Witam, w moim kodzie dokonałem kilka poprawek przez co program przestał prawidłowo działać.

Mianowicie - mam daną zmienną:
C/C++
std::map < const char *, Buffer *> buff_s;
Do tej pory sprawdzałem czy dana jest zawarta w buff_s za pomocą fragmentu:
C/C++
char filename[] = "test.txt";
if( buff_s[ filename ] == NULL ) {...}

Pierwsze pytanie: czy takie coś jest poprawne? Zależy mi na jak najszybszym działaniu programu, zatem czy muszę koniecznie używać:
C/C++
char filename[] = "test.txt";
if( buff_s.find( filename ) == buff_s.end() ) {...}
?
--------------------
Drugie pytanie:
Dodawałem nową daną za pomocą fragmentu:
C/C++
void JakasKlasa::LoadFile( const char * filename )
{
    JakasKlasa::buff_s[ filename ] = new Buffer();
    // jakieś tam operacje na tych danych.
}

Problem w tym, że w poprawionym kodzie argument funkcji LoadFile był typu std::string, więc tworzenie nowego obiektu Buffer wyglądało tak:
C/C++
void JakasKlasa::LoadFile( std::string filename )
{
    JakasKlasa::buff_s[ filename.data() ] = new Buffer();
    // jakieś tam operacje na tych danych.
}
Tu pojawił się problem, ponieważ "filename.data()" (std::string) to nie to samo co "filename" (const char*).
Jak rozwiązać ten problem?

Trzecie pytanie:
Czy nowy obiekt do mapy powinienem dodawać tak:
C/C++
JakasKlasa::buff_s.insert( std::pair < const char *, Buffer *>( filename, new Buffer() ) );
?
P-139492
j23
» 2015-11-01 22:45:38
Ad 1.
czy takie coś jest poprawne?
Błędem to nie jest, ale operator [] dodaje wartość o podanym kluczu, jeśli taka nie istnieje. Zatem użycie [] w warunku nie jest dobrym pomysłem. Opcja z 'find' jest najoptymalniejsza (zresztą operator[] też najpierw szuka klucza).

Ad 2. zamiast klucza 'const char*' daj 'std::string'.

Ad 3. możesz użyć wspomnianego wcześniej operatora [].

P-139495
« 1 »
  Strona 1 z 1