| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > STL<map> и VC6+ |
| Автор: bel_nikita 7.11.2003, 09:53 |
| Что-то не пойму как создать ассоциативный список с фиксированным к-вом элементов. Т.е. динамическое выделение мне не подходит. Количество элементов в списке должно быть фиксированное. И еще, возможно ли избавиться от назойливого warning'а за номером 4786, кроме как #pragma warning(disable : 4786) |
| Автор: SeregaLBN 7.11.2003, 11:37 |
| Заверни map в свой класс, в конструкторе которого устанавливай необходимый размер. От warning'a избавиться точно можно, я это видел, вроде бы, у Страуструпа.... Как точно - непомню. Найду, дам знать... |
| Автор: SeregaLBN 7.11.2003, 11:54 |
| Нашёл. Страуструп. Третье издание. Приложение Б (Совместимость) - Б.3.5. Шаблоны. |
| Автор: bel_nikita 7.11.2003, 13:23 | ||
map pавернут в класс, но как установить размер? не мог бы привести пример. я не совсем "дохожу" как вызвать конструктор, точнее как вообще создается список. Я с STL еще ни разу не пробывал работать. А тут как раз подходящий случай мне подвернулся: надо создать ассоциативный список <ключ, значение>. спасибо за warnin. |
| Автор: SeregaLBN 7.11.2003, 14:25 |
| Держи //#define UNICODE #ifdef UNICODE #pragma comment(linker, "/ENTRY:wWinMainCRTStartup") #define _UNICODE #else #pragma comment(linker, "/ENTRY:WinMainCRTStartup") #endif // UNICODE #include <windows.h> #include <windowsx.h> #include <tchar.h> #pragma warning(disable:4786) #include <map> #include <vector> typedef int KEY; typedef TCHAR VALUE; typedef std::map<KEY, VALUE> MAP_KeyValue; typedef std::vector<KEY > VECTOR_Key; typedef std::vector<VALUE> VECTOR_Value; class CEnvelopeMap { private: mutable MAP_KeyValue map; public: CEnvelopeMap(const VECTOR_Key &key, const VECTOR_Value& value) { size_t size = key.size(); if (size != value.size()){ // error return; } for (int i=0; i<size; i++) { map[key[i]] = value[i]; } } // Здесь добавляй прочие методы не меняющие размер map. // Типа следующих: size_t GetSize() const {return map.size();} VALUE& operator[](const KEY &key) {return map[key];} const VALUE operator[](const KEY &key) const {return map[key];} }; int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpszCmdLine, int nCmdShow ) { const size_t max = 5; VECTOR_Key key; VECTOR_Value val; key.resize(max); val.resize(max); // заполняеш своими значениями for (int i=0; i<max; i++) { key[i] = i; val[i] = TEXT('0') + i; } // создание map CEnvelopeMap Map(key, val); { // выборка Map[0]; VALUE& val1 = Map[1]; // выборка на чтение/запись val1 = TEXT('X'); // можешь менять - меняется и в Map VALUE val2 = Map[2]; // выборка на чтение/запись val2 = TEXT('Y'); // можешь менять - но в Map значение _НЕ_ меняется const VALUE val3 = Map[3]; // выборка только на чтение //val2 = TEXT('Z'); // ERROR - нельзя менять } return 0; } |
| Автор: bel_nikita 7.11.2003, 14:33 |
| SeregaLBN спасибо! ща буду эксперенменты ставить |