首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将值的向量存储到映射中的最佳方法

将值的向量存储到映射中的最佳方法
EN

Stack Overflow用户
提问于 2013-06-29 02:35:56
回答 2查看 1.4K关注 0票数 0

我有一个映射,键是字符串,值是字符串的向量,如下所示

代码语言:javascript
复制
   std::map<std::string, std::vector<std::string> > keyTable;

我有以下一段代码,用于解析值字符串并将它们存储到映射中。这些值由|分隔。我需要解析它们,并将其作为字符串的向量存储到map中。

因此,我有下面这段代码来做这件事。在速度和效率方面,有没有更好的解决方案?

代码语言:javascript
复制
    keyTable.insert(key, std::vector<std::string>());
    std::vector<std::string>& valueVect = keyTable[key];
    boost::tokenizer tokens( str , "|");
    for ( boost::tokenizer::iterator tok_iter = tokens.begin() ; tok_iter != tokens.end() ; ++tok_iter )
    {
        valueVect.push_back(*tok_iter);
    }
EN

回答 2

Stack Overflow用户

发布于 2013-06-29 03:22:32

在我看来,更好的解决方案是不使用boost库,因为它会增加代码开销。下面的代码将完成相同的工作:

代码语言:javascript
复制
const char * begin = str.c_str();
const char * end = begin + str.length();
while (begin < end){
  const char *ptr = begin;
  while (*ptr != '|' && *ptr != '\0') ptr++;
  valueVect.push_back( string(begin, ptr - begin));
  begin = ptr+1;
}
票数 0
EN

Stack Overflow用户

发布于 2013-06-29 03:22:55

在纯C++03中,这几乎是我能得到的最高效率:

代码语言:javascript
复制
std::vector<std::string>& valueVect = keyTable[key];
std::string::const_iterator b = str.begin();
std::string::const_iterator end = str.end();
while (b != end) {
  std::string::const_iterator it = std::find( b, str.end(), '|' );
  valueVect.push_back();
  std::string& newStr = valueVect.back();
  newStr.append( b, it );
  b = it;
  if (b != end)
    ++b;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17371431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档