Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C++ (auch C++0x und C++11) ::  map mit arrays ?  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
asc
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.01.2007
Beiträge: 5050
Beitrag asc Mitglied 11:31:21 11.03.2010   Titel:              Zitieren

se1111 schrieb:
Allerdings habe ich hier VC++ 6.0 und ob es da die TR1 gibt, bin ich mir grad nicht sicher.


Nein, gibt es nicht. Dann ist der Weg etwas umständlicher, aber mit std::vector dennoch machbar.

Dennoch die schon hier gestellte Frage: Warum VC++ 6.0? Sofern dir dies nicht durch eine Firma vorgegeben wurde rate ich dir ganz dringend zu einem Wechsel auf eine aktuelle Plattform (z.B. Visual C++ 2008 Express).

Der VC++ 6.0 hat etliche Probleme mit dem C++ Standard (logisch, der C++ Standard kam etwas danach raus).

Aber um auf die Alternativen zurück zu kommen:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <map>
#include
<vector>

int main()
{
    std::map<int, std::vector<int> > identityArray;

    // Beim ersten Zugriff auf Id den vector für drei Elemente initialisieren:
    identityArray[4711] = std::vector<int>(3);

    // Rest läuft identisch, nur muss sichergestellt sein, das vor dem Zugriff
    // auf den jeweiligen vector über den Indexoperator dieser schon drei
    // Elemente enthält (Ein Standardkonstruierter vector enthält anfangs 0
    // Elemente).

    ...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <map>
#include
<vector>

int main()
{
std::map<int, std::vector<int> > identityArray;

// Beim ersten Zugriff auf Id den vector für drei Elemente initialisieren:
identityArray[4711] = std::vector<int>(3);

// Rest läuft identisch, nur muss sichergestellt sein, das vor dem Zugriff
// auf den jeweiligen vector über den Indexoperator dieser schon drei
// Elemente enthält (Ein Standardkonstruierter vector enthält anfangs 0
// Elemente).

...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <map>
#include
<vector>

int main()
{
    std::map<int, std::vector<int> > identityArray;

    // Beim ersten Zugriff auf Id den vector für drei Elemente initialisieren:
    identityArray[4711] = std::vector<int>(3);

    // Rest läuft identisch, nur muss sichergestellt sein, das vor dem Zugriff
    // auf den jeweiligen vector über den Indexoperator dieser schon drei
    // Elemente enthält (Ein Standardkonstruierter vector enthält anfangs 0
    // Elemente).

    ...
}

_________________
in theory there's no difference between theory and practice. in practice there is. (yogi berra)

In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
se1111
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.02.2010
Beiträge: 7
Beitrag se1111 Mitglied 11:22:17 12.03.2010   Titel:              Zitieren

Genau ich muss ihm die Sachen reservieren. Das war das Problem wo ich nicht sicher war.
asc schrieb:

// Beim ersten Zugriff auf Id den vector für drei Elemente initialisieren:
identityArray[4711] = std::vector<int>(3);


Ich hoff ich verstehe es richtig, dann müsste ich das ja so schreiben:
C/C++ Code:
for (..Identity.. )
{
  array_a_map.insert(make_pair(Identity, std::vector<int>(3)));



}
C/C++ Code:
for (..Identity.. )
{
array_a_map.insert(make_pair(Identity, std::vector<int>(3)));



}
C/C++ Code:
for (..Identity.. )
{
  array_a_map.insert(make_pair(Identity, std::vector<int>(3)));



}


Zuletzt bearbeitet von se1111 am 11:22:38 12.03.2010, insgesamt 1-mal bearbeitet
asc
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.01.2007
Beiträge: 5050
Beitrag asc Mitglied 13:03:14 12.03.2010   Titel:              Zitieren

se1111 schrieb:
Genau ich muss ihm die Sachen reservieren.


Nein, DU musst die Sachen nicht zwangsweise reservieren. Zumindest wenn du mit Objekten arbeitest, die eben diese Aufgabe für dich übernehmen. Und ein Standardkonstruiertes std::tr1::array<int, 3> wäre für dich als Mapelement eigentlich genau richtig (Ist aber nicht extrem veralteten VC++ 6.0 enthalten).

Die Map stellt bereits eine Initialisierung mit dem Standardkonstruktor sicher. Sofern du den Indexoperator verwendest, ist Sichergestellt das ein entsprechendes Objekt bereits existiert. Nur muss man 3 Fälle unterscheiden:
a) Ein Standardkonstruierter Zeiger bringt dir hier keinen Nutzen.
b) Ein Standardkonstruiertes std::tr1::array<int, 3> ist eine Arrayklasse mit 3 int-Werten (Im wesentlichen ein Wrapper um ein C-Array).
c) Ein Standardkonstruiertes std::vector ist ein vector mit 0 Elementen. Da du 3 benötigst musst du selbst sicherstellen das die beim lesenden Zugriff auch enthalten sind. Dies geht entweder durch eine Zuweisung mit einem entsprechenden Vector, oder ein resize...

se1111 schrieb:
Ich hoff ich verstehe es richtig, dann müsste ich das ja so schreiben:
C/C++ Code:
for (..Identity.. )
{
  array_a_map.insert(make_pair(Identity, std::vector<int>(3)));

}
C/C++ Code:
for (..Identity.. )
{
array_a_map.insert(make_pair(Identity, std::vector<int>(3)));

}
C/C++ Code:
for (..Identity.. )
{
  array_a_map.insert(make_pair(Identity, std::vector<int>(3)));

}


Kürzer Wäre:

C/C++ Code:
for (..Identity.. )
{
  array_a_map[Identity] = std::vector<int>(3);
  // ODER
  array_a_map[Identity].resize(3);
}
C/C++ Code:
for (..Identity.. )
{
array_a_map[Identity] = std::vector<int>(3);
// ODER
array_a_map[Identity].resize(3);
}
C/C++ Code:
for (..Identity.. )
{
  array_a_map[Identity] = std::vector<int>(3);
  // ODER
  array_a_map[Identity].resize(3);
}


Bei verwendung eines neuen Compilers mit der TR1 Unterstützung kannst du dir diesen Schritt gänzlich schenken (wie gesagt std::tr1::array).

_________________
in theory there's no difference between theory and practice. in practice there is. (yogi berra)

In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
asc
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.01.2007
Beiträge: 5050
Beitrag asc Mitglied 13:05:27 12.03.2010   Titel:              Zitieren

Vielleicht noch ein letztes: In C++ ist es nicht unüblich das man die Speicherverwaltung Klassen überlässt die es intern behandeln (z.B. die Containerklassen der STL).

_________________
in theory there's no difference between theory and practice. in practice there is. (yogi berra)

In der Theorie gibt es kein Unterschied zwischen Theorie und Praxis. In der Praxis sehr wohl.
C/C++ Forum :: C++ (auch C++0x und C++11) ::  map mit arrays ?  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.