нужно из вне класса А изменить значения в мапе, которую он содержит. написал код, но он меня немного смущает, а именно использование статической переменной. может можно переписать код, чтоб сохранилась логика?
struct B
{
B()
{
data = "";
}
string data;
};
class A
{
map<int, B> b;
public:
A()
{
b.emplace(1, B() );
b.emplace(4, B() );
}
vector<string*>& getData()
{
static vector<string*> data;
data.clear();
for(auto& b_ : b)
data.push_back(&b_.second.data);
return data;
}
};
безотносительно других проблем с кодом, вам просто не надо возвращать вектор по ссылке, а надо по значению, тогда статическим его делать не понадобится.
этот код вызывает как минимум три отдельных слоя офигевания
сделай мапу паблик да и всё
Оператор квадратные скобочки? Я думаю, что здесь это может хорошо подойти
вообще довольно мутная логика. Но тут можно сделать: Можно возвращать вместо вектора самописную ленивую коллекцию (например корутиновский std::generator), правда будет нелинейный рандомный доступ. (Во многих других языках у map даже есть свойство Values которое возвращает такую коллекцию) Можно написать обертку над стандартным мапом, которая будет внутри содержать сам map и vector с ссылками для значений, в этом варианте будет рандомный доступ, но вставка и удаление будут дороже.
Обсуждают сегодня