加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 地图>>比连接字符串要慢吗?

发布时间:2020-12-16 05:37:36 所属栏目:百科 来源:网络整理
导读:我需要根据三个不同的标准访问一些数据,如下所示: my_map["string1"]["string2"]["string3"] 现在我想知道以这种方式连接字符串是否有意义: my_map["string1|string2|string2"] 这会节省查找操作的时间吗? 还有其他重要因素需要考虑吗? 解决方法 在此之
我需要根据三个不同的标准访问一些数据,如下所示:
my_map["string1"]["string2"]["string3"]

现在我想知道以这种方式连接字符串是否有意义:

my_map["string1|string2|string2"]

这会节省查找操作的时间吗?
还有其他重要因素需要考虑吗?

解决方法

在此之前应该先查看您需要支持的用例.如果您的数据是分层的,并且您需要访问它的整个子部分(例如传递my_map [“criteria1”],您应该坚持使用第一个版本.

如果不是这种情况,并且您只有一组具有三个正交条件的大数据,则可以优化访问.连接字符串不是最好的方法,因为它为复制和连接字符串创建了一定的开销,你需要小心分隔符,甚至可能要求你逃避某些字符,这会带来更多的开销和更多的复杂性,这意味着:更多的错误.相反,您希望将三个条件存储在一个合适的密钥类型中:std :: tuple.

您的地图可能看起来像(给定的是某些类型X的存储值):

using my_key_type = std::tuple<std::string,std::string,std::string>;
std::map< my_key_type,X > my_map;

添加值的工作方式如下:

my_map.emplace( my_key_type( "A","B","C" ),x ); // x is a value of type X

查找可以通过以下方式高效完成:

X x = my_map[ std::tie( "A","C" ) ];

正如DavidRodríguez所指出的,当与[]一起使用时,std :: tie的效率并不高,但它比std :: make_shared短.无论如何,当你使用my_map.find(std :: tie(“A”,“B”,“C”))时,你将在C 14中获益.这将允许编译器省略复制字符串以进行查找.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读