Доступ к определенному значению из одного ключа-нескольких контейнеров значений - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь реализовать многозначные контейнеры, используя C ++, и получить свободный доступ к каждому из значений внутри. У меня есть int ключ; такие значения, как X, Y, ширина, высота в качестве ввода.

Я пытаюсь извлечь значения из каждого ключа. Но очевидно, что код не работает в этом случае.

Я хотел бы получить совет, можно ли это сделать или какие-либо предопределенные библиотеки контейнеров с большей гибкостью в плане доступа к множественным значениям.

Я попробовал независимые одноключевые, однозначные контейнеры 'multimap', но он потребляет слишком много памяти и производительность перетаскивания

multimap<int, multimap <multimap<int, int>, multimap<int, int>>> BlobPos = {};
//[<1,{(2,3),(4,5)}>,<2,{(6,7),(8,9)}>


for (auto it = BlobPos.begin();it != BlobPos.end(); it++) { 
auto X = it->second-> first->first; 
auto Y = it->second->first->second;
auto H = it->second->second->first;
auto W =  it->second-second->second;

cout << X << Y << H << W;

2 3 4 5
6 7 8 9

1 Ответ

0 голосов
/ 18 июня 2019

Вот пример контейнера, структурированного почти так, как описано в вашем вопросе:

#include <map>
#include <utility>
#include <iostream>

int main() {

    std::map<int, std::pair<std::pair<int, int>, std::pair<int, int>>> BlobPos = {{1, {{2, 3}, {4, 5}}}, {2, {{6, 7}, {8, 9}}}};
    for (auto it = BlobPos.begin();it != BlobPos.end(); it++) { 
        auto X = it->second.first.first; 
        auto Y = it->second.first.second;
        auto H = it->second.second.first;
        auto W = it->second.second.second;

        std::cout << X << Y << H << W << '\n';
    }
    return 0;
}

Для ссылки требуется оператор ->, но на следующих уровнях для доступа к элементам используется оператор ..

...