powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::map и конструктор объекта
8 сообщений из 8, страница 1 из 1
std::map и конструктор объекта
    #33237592
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
предположим есть класс
A{
A(std::string str);
}

есть std::map<int,A> B;
как сделать так что если мы вызываем str1 = B[10] и элемента B[10] еще нет то B[10] былне пустой строкой а скажем B[10]="Unknown". Т.е. можно ли как то указать конструктор который будет испльзоваться для такой стуации.
...
Рейтинг: 0 / 0
std::map и конструктор объекта
    #33237602
AndreiNz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю, что вам не конструктор нужен, а нужно перопределить оператор [] класса B
...
Рейтинг: 0 / 0
std::map и конструктор объекта
    #33237652
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChameLe0nпредположим есть класс
A{
A(std::string str);
}

есть std::map<int,A> B;
как сделать так что если мы вызываем str1 = B[10] и элемента B[10] еще нет то B[10] былне пустой строкой а скажем B[10]="Unknown". Т.е. можно ли как то указать конструктор который будет испльзоваться для такой стуации.

А какие проблемы раз хранишь не строки а объекты A ? :)

Определди конструктор по умолчанию для A

Вот пример или я что то не так понял ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class A {
  public:
    A(const std::string& str) {
            if (str.empty()) str_ = "Unknown"
           else str_ = str
    }
   
    std::string& getValue() { return str_ }

 protected:
   std::string str_;
};
...
Рейтинг: 0 / 0
std::map и конструктор объекта
    #33237654
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интегратор ChameLe0nпредположим есть класс
A{
A(std::string str);
}

есть std::map<int,A> B;
как сделать так что если мы вызываем str1 = B[10] и элемента B[10] еще нет то B[10] былне пустой строкой а скажем B[10]="Unknown". Т.е. можно ли как то указать конструктор который будет испльзоваться для такой стуации.

А какие проблемы раз хранишь не строки а объекты A ? :)

Определди конструктор по умолчанию для A

Вот пример или я что то не так понял ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class A {
  public:
    A(const std::string& str) {
            if (str.empty()) str_ = "Unknown"
           else str_ = str
    }
   
    std::string& getValue() { return str_ }

 protected:
   std::string str_;
};


Бес попутал :)
конечно надо
A(const std::string& str = "") ....
...
Рейтинг: 0 / 0
std::map и конструктор объекта
    #33237657
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChameLe0nпредположим есть класс
A{
A(std::string str);
}

есть std::map<int,A> B;
как сделать так что если мы вызываем str1 = B[10] и элемента B[10] еще нет то B[10] былне пустой строкой а скажем B[10]="Unknown". Т.е. можно ли как то указать конструктор который будет испльзоваться для такой стуации.

Ты кстати обрати внимание что в этом случае элементы добавляются в map - ты уверен что это тебе нужно ?
...
Рейтинг: 0 / 0
std::map и конструктор объекта
    #33237714
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интегратор ChameLe0nпредположим есть класс
A{
A(std::string str);
}

есть std::map<int,A> B;
как сделать так что если мы вызываем str1 = B[10] и элемента B[10] еще нет то B[10] былне пустой строкой а скажем B[10]="Unknown". Т.е. можно ли как то указать конструктор который будет испльзоваться для такой стуации.

А какие проблемы раз хранишь не строки а объекты A ? :)

Определди конструктор по умолчанию для A

Вот пример или я что то не так понял ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class A {
  public:
    A(const std::string& str) {
            if (str.empty()) str_ = "Unknown"
           else str_ = str
    }
   
    std::string& getValue() { return str_ }

 protected:
   std::string str_;
};


1) Если по логике работы объекта А нужно чтобы он инициализировался пустой строкой, а в том месте где он используется внутри std::map нужно чтобы срабатывал конструктор с параметром "Unknown".
2) Если я пишу std::map <int,int> где например значение элемента 0-false,1 - true, -1 - неопределено(неустановлено ранее), мне не нужно писать обертку в виде класса для int чтобы инициализировать его -1.

Вопрос в том что map нужно както указать конструктор для неявного создания елементов...
...
Рейтинг: 0 / 0
std::map и конструктор объекта
    #33237769
Интегратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь объяснить в чём заключается исходная задача ? :)
...
Рейтинг: 0 / 0
std::map и конструктор объекта
    #33238228
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO, не прокатит так...
Что - то типа того (первое, что пришло на ум):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
std::map<int,A> iterator it;
it=B.find( 10 );
 if(it!=B.end()) str1=it->second();
else{ 
     str1=TEXT("Unknown");
     B.insert(std::make_pair( 10 ,TEXT("Unknown")));
}
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::map и конструктор объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]