将值的矢量存储到地图中的最佳方式
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);
}
在纯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;
}
从我的角度来看,更好的解决方案是不使用boost库,因为它会给代码增加开销。以下代码将执行相同的工作:
const char * begin = str.c_str();
const char * end = begin + str.length();
while (begin < end){
const char *ptr = begin;
while (*ptr != '|' && *ptr != ' ') ptr++;
valueVect.push_back( string(begin, ptr - begin));
begin = ptr+1;
}
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么不;名字在地图上是按顺序排列的吗
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 基于多个条件处理地图中的所有元素
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 在C++中将矢量转换为嵌套地图
- 派生类销毁的最佳实践是什么
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- C++将所有元素从矢量复制到地图/unordered_map的最佳方法
- 获取地图值作为向量的最佳方法是什么
- 在游戏地图上选择100种情况的最佳方法(MFC,CPoint)
- 开放世界 3D 环境的最佳地图格式
- 查看地图范围的最佳方式
- 将值的矢量存储到地图中的最佳方式
- 插入标准::地图的最佳方法
- 迭代地图和删除项目的最佳模式是什么?