Хранение и доступ к коллекции строк (STD C ++) - PullRequest
0 голосов
/ 03 декабря 2010
SKU1       SKU2        Description
"01234"    "34545"     "White Bread"
"01545"    "34236"     "Wheat Bread"

Мне нужно дать перекрестную ссылку на эти три поля, то есть получить SKU2, когда он знает SKU1, SKU1, когда он знает SKU2, и Description, когда он знает либо SKU1, либо SKU2.

Мне интересно - что это?лучший способ сделать это?Векторы, использующие search () или find ()?Как-то использовать карту?

В настоящее время она работает с использованием vector< vector<string> >, циклически перебирая «родительские» и «дочерние» векторы, сравнивая значения, но это кажется примитивным.

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

vector< vector<string> > products;

int i = 0;
for( i = 0; i < 2; ++i)
{
    products.push_back( vector<string>() );

    products[i].push_back( "SKU1" );
    products[i].push_back( "SKU2" );
    products[i].push_back( "Description" );

}

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 03 декабря 2010
1 голос
/ 03 декабря 2010

Я бы порекомендовал использовать две карты, которые индексируют объект, который имеет необходимую информацию:

struct MyInfo
{
  std::string SKU1;
  std::string SKU2;
  std::string Description;
};

std::map<std::string, MyInfo *> SKU1map;
std::map<std::string, MyInfo *> SKU2map;

MyInfo * newProduct = new MyInfo; ///Do not forget to delete!!
newProduct->SKU1 = //SKU1 value
newProduct->SKU2 = //SKU2 value
newProduct->Description = //Description value

SKU1map[newProduct->SKU1] = newProduct;
SKU2map[newProduct->SKU2] = newProduct;

Это будет довольно быстрая реализация (намного лучше, чем линейный поиск), и если вы будете иметь дело со многими экземплярами продукта, то это также будет более эффективно использовать память.

0 голосов
/ 03 декабря 2010

Создайте три std::map<std::string, std::string> s: один для сопоставления SKU1s с SKU2s, один для сопоставления SKU1s с описаниями и один для сопоставления SKU2s с описаниями.(Еще лучше, используйте std :: unordered_map, если он у вас есть (C ++ 0x)).

Это предполагает, что у вас много данных и вы устанавливаете приоритеты по скорости, а не по использованию памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...