Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
OMapInnerNode::internal_iterator_t
OMapInnerNode::get_containing_child(const std::string &key)
{
- auto iter = std::find_if(iter_begin(), iter_end(),
- [&key](auto it) { return it.contains(key); });
+ auto iter = string_lower_bound(key);
+ if (iter == iter_end() || (iter != iter_begin() && iter.get_key() > key)) {
+ iter--;
+ }
+ assert(iter.contains(key));
return iter;
}
}
const_iterator find_string_key(std::string_view str) const {
- auto ret = iter_begin();
- for (; ret != iter_end(); ++ret) {
- std::string s = ret->get_key();
- if (s == str)
- break;
+ auto iter = string_lower_bound(str);
+ if (iter.get_key() == str) {
+ return iter;
}
- return ret;
+ return iter_cend();
}
iterator find_string_key(std::string_view str) {