big_dict[key]->insert(value);
就这个,每次都要在 big_dict 里查找一边 key。虽然是 O(1)但用多了也会影响速度(并不确定有多大影响)。
这个写法就非常不 C++。之前 find 的时候就该缓存一下查找结果。
具体的你可以贴出最终代码,vs 或者 vtune 什么的都可以跑 profile 找程序热点。
字符串分割的话 boost 之类的库都有,我也自己写过一个简单的(导出 string_view 避免拷贝的)
/**
** @
brief split source using judger, putting slice into container
** @
param src source
** @
param judger a function that accepts one element and return (bool) whether it is delim
** @
param container a container that allows push_back to put a slice of std::basic_string_view<CharT>
** @
param keepblank whether should keep blank splice
**/
template<class T, class CharT = T::value_type, class Judger, class Container>
inline void split(const T& src, const Judger judger, Container& container, const bool keepblank = true)
{
using namespace std;
size_t cur = 0, last = 0, len = src.length();
for (; cur < len; cur++)
{
if (judger(src[cur]))
{
if (keepblank || cur != last)
container.push_back(basic_string_view<CharT>(&src[last], cur - last));
last = cur + 1;
}
}
if (keepblank || cur != last)
container.push_back(basic_string_view<CharT>(&src[last], cur - last));
}