Как добавить в коллекцию, которая уже хранится в коллекции? - PullRequest
1 голос
/ 30 марта 2019

У меня есть следующее:

class SpritesheetManager{

        std::unordered_map<std::string,std::unordered_set<std::string>> _loadedFiles;

        void addFileToFileListForSheet(std::string sheetprefix,std::string filename);
}

При добавлении файлов я делаю это:

void SpritesheetManager::addFileToFileListForSheet(std::string sheetprefix,std::string filename){
    bool containsKey = (_loadedFiles.find(sheetprefix)!= _loadedFiles.end());

    std::unordered_set<std::string> values;
    if(!containsKey){
        _loadedFiles[sheetprefix] = values;
    }

    _loadedFiles[sheetprefix].insert(filename);
}

Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 30 марта 2019

Используя тот факт, что operator[] автоматически создает значения по умолчанию и вставляет значение, если вы пытаетесь получить доступ к ключу, который не существует, вы можете упростить свой код до этого:

void SpritesheetManager::addFileToFileListForSheet(std::string sheetprefix,std::string filename) {
    _loadedFiles[sheetprefix].insert(filename);
}
1 голос
/ 30 марта 2019

Ответ Этьена де Мартеля упростит код, если вы сохраните эту структуру данных.Однако, если вам не нужны какие-либо функции, общие для префикса листа (например, просмотр всех файлов с одинаковым префиксом и т. Д.), И вы просто хотите сохранить несколько файлов с одинаковым префиксом, вы можете значительно упростить свой код,используя заголовок unordered_multimap:

:

class SpritesheetManager {    
        std::unordered_multimap<std::string, std::string> _loadedFiles;

        void addFileToFileListForSheet(std::string sheetprefix, std::string filename);
}

Реализация:

void SpritesheetManager::addFileToFileListForSheet
    (std::string sheetprefix, std::string filename) {
    _loadedFiles.insert(std::make_par(sheetprefix, filename));
}
...