struct TMyClass{ String* Data; size_t Size; __fastcall TMyClass(const size_t ASize) : Size(ASize), Data(new String[ASize]) { } __fastcall ~TMyClass() { delete [] Data; }};
typedef std::mapString, TStringList*> TStrListMap;typedef TStrListMap::iterator TStrListMap_I;typedef TStrListMap::const_iterator TStrListMap_CI;
TStrListMap MyMap;
void __fastcall DeleteElement(const String& AKey){ TStrListMap_I it = MyMap.find(AKey); if(it != MyMap.end()) { // если ключ найден delete it->second; // освобождаем память, используемую значением (2-я часть пары-элемента) MyMap.erase(it); // удаляем элемент из контейнера }}
void __fastcall ClearMap(){ for(TStrListMap_I it=MyMap.begin(); it!=MyMap.end(); ++it) delete it->second; MyMap.clear();}
MyMap["One"] = new TStringList(); // добавляем 1-ый элементMyMap["One"]->Add("One 1"); // добавляем строки в 1-ый элементMyMap["One"]->Add("One 2");MyMap["One"]->Add("One 3");MyMap["Two"] = new TStringList(); // добавляем 2-1 элементMyMap["Two"]->Add("Two 1"); // добавляем строки во 2-й элементMyMap["Two"]->Add("Two 2");
// структура для хранения данных из 1 секции ini файлаstruct TIniSection{ TDateTime FDateTime; // время (=time) String Name; // =name String About; // =about __fastcall TIniSection(const TDateTime& ADateTime=TDateTime(), const String& AName="", const String& AAbout="") : FDateTime(ADateTime), Name(AName), About(AAbout) { }}; // определения типовtypedef std::mapString, TIniSection> TIniMap;typedef TIniMap::iterator TIniMap_I;typedef TIniMap::const_iterator TIniMap_CI; // функция для заполнения контейнера из ИНИ файлаvoid __fastcall GetIniMap(TIniFile* IniFile, TIniMap& AMap){ // очищаем контейнер AMap.clear(); // список названий секций std::unique_ptrTStringList> slSections(new TStringList()); // получаем названия секций из ini IniFile->ReadSections(slSections.get()); // цикл по секциям for(int i=0; islSections->Count; i++) { // добавляем след. элемент в контейнер AMap[slSections->Strings[i]] = TIniSection( IniFile->ReadDateTime(slSections->Strings[i], "time", TDateTime()), IniFile->ReadString(slSections->Strings[i], "name", ""), IniFile->ReadString(slSections->Strings[i], "about", "") ); }}
TIniMap AMap;GetIniMap(std::unique_ptrTIniFile>(new TIniFile("inifile.ini")).get(), AMap);TDateTime DT = AMap["FILE1"].FDateTime; // время из 1-й секции ini файла ("FILE1")
std::mapString, std::unique_ptrTStringList> > MyCustomContent;MyCustomContent["key"].reset(new TStringList);//**************TStringList *values = MyCustomContent["key"];values->Add("value1");values->Add("value2");values->Add("value3");//**************String value = MyCustomContent["key"]->Strings[1]; // second value
MyCustomContent["key"].reset(new TStringList);
delete MyCustomContent["key"];MyCustomContent["key"] = new TStringList();
TStringList *values = MyCustomContent["key"];
TStringList&* values = MyCustomContent["key"];
TStringList*& values = MyCustomContent["key"];
if(ListView1->ItemIndex != -1) { std::mapString, std::vectorString> >::iterator It = IniContent.begin(); int pos = ListView1->Items->Item[ListView1->ItemIndex]->Index; for(int i = 0; i pos; i++) { It++; }
typedef std::mapString, std::vectorString> >::iterator TStrVecMap_I; // тип итератора const int Index = ListView1->ItemIndex;if(Index 0 || Index >= IniContent.size()) throw Exception("List index out of bounds!"); // проверка индексаTStrVecMap_I it=IniContent.begin();for(int i=0; iIndex; i++) ++it; // теперь итератор в правильной позиции
if(ListView1->ItemIndex >= 0) { TStrVecMap_I it = IniContent.find(ListView1->Items->Strings[ListView1->ItemIndex]); if(it != IniContent.end()) { // если найден элемент ... // работа с элементом через итератор } // ...}
const System::UnicodeString sText = L"CA";void __fastcall TMainForm::ListView1UpdatingObjects(const TObject *Sender, const TListViewItem *AItem, bool &AHandled){ //взято из стандартных примеров студии - делает метку справа в списке, там покажем время TListItemText * LCaption = reinterpret_castTListItemText*>((const_castTListViewItem*>(AItem))->Objects->FindObject(sText)); if (LCaption == NULL) { LCaption = new TListItemText((TListItem*)AItem); LCaption->Name = sText; LCaption->Align = TListItemAlign::Trailing; LCaption->VertAlign = TListItemAlign::Trailing; LCaption->PlaceOffset->X = 15; LCaption->PlaceOffset->Y = 12; LCaption->TextAlign = TTextAlign::Center; LCaption->Trimming = TTextTrimming::Character; LCaption->IsDetailText = True; LCaption->Width = 90; LCaption->Height = 45; }} //заполнение спискаstd::mapString, std::vectorString> >::iterator It = IniContent.begin(); int i = 1; ListView1->BeginUpdate(); while (It != IniContent.end()) { TListViewItem * item = ListView1->Items->Add(); item->Text = L"№" + IntToStr(i) + " " + IniContent[(*It).first][1];//имя файла из ini item->Detail = MainForm->IniContent[(*It).first][2];//about из ini файла item->BitmapRef = Image1->Bitmap; item->Data[sText] = TValue::FromUnicodeString>((*It).first);//время из ini пишем справа в списке It++; i++; } ListView1->EndUpdate();