簡體   English   中英

將值向量存儲到映射中的最佳方法

[英]Best way to store vector of values into a map

我有一個鍵為字符串的地圖,值是字符串的向量,如下所示

   std::map<std::string, std::vector<std::string> > keyTable;

我具有以下代碼,以解析值字符串並將其存儲到映射中。 值用|分隔。 我需要解析它們並將其作為字符串向量存儲到地圖中。

因此,我有以下代碼可以做到這一點。 在速度和效率方面是否有更好的解決方案?

    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);
    }

在我看來,更好的解決方案是不使用boost庫,因為它會增加代碼的開銷。 以下代碼將完成相同的工作:

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;
}

在純C ++ 03中,這與我所能獲得的效率差不多:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM