存储和访问字符串集合(STD C ++)

时间:2010-12-03 05:46:14

标签: c++ string vector

SKU1       SKU2        Description
"01234"    "34545"     "White Bread"
"01545"    "34236"     "Wheat Bread"

我需要交叉引用这三个字段,即在知道SKU1的同时检索SKU2,知道SKU2时知道SKU1,在知道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 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

我建议使用两个索引到具有所需信息的对象的地图:

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;

这将是一个相当快的实现(比线性搜索好得多),如果你处理许多产品实例,那么它也将更有效。

答案 2 :(得分:0)

构建三个std::map<std::string, std::string>:一个用于将SKU1映射到SKU2,一个用于将SKU1映射到描述,另一个用于将SKU2映射到描述。 (更好的是,使用std :: unordered_map,如果你有它(C ++ 0x))。

这假设您拥有大量数据并且优先考虑速度而不是内存使用情况。