Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在低延迟的应用程序中,unordered_map是比vector更好的解决方案吗?

在低延迟的应用程序中,unordered_map是比vector更好的解决方案吗?
EN

Stack Overflow用户
提问于 2019-01-23 15:49:32
回答 2查看 370关注 0票数 2

在开发低延迟应用程序时,使用unordered_map代替vector是否可取?

我最近参加了一家金融公司的面试,该公司致力于开发低延迟交易应用程序。我被问到一个问题,我用一个unordered_map回答了这个问题,与使用向量(O(n*n))相比,这个问题在效率方面(0(n))似乎相当好。但是,我知道为了利用缓存一致性的好处,建议尽可能多地使用向量并避免使用unordered_map。我只是想看看对于这个问题是否有更好的解决方案,我被问到的问题是检查两个字符串是否是彼此的排列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool isPermutation(const std::string& first, const std::string& second) {
    std::unordered_map<char, int> charDict;
    if(first.length() != second.length()) 
        return false;

    for(auto it: first) {
        charDict[it]++;
    }

    for(auto it: second) {
        if(charDict.count(it) > 0) {
        --charDict[it];
    } else {
        return false;
    }
    return true;
}

您可以假设两个字符串的长度相等,并且仅当第二个字符串中每个字符的出现次数与第一个字符串中的每个字符的出现次数相同时,才假定函数返回true。

EN

回答 2

Stack Overflow用户

发布于 2019-01-23 15:58:55

当然可以,但这真的取决于你想要解决的问题。如果您的键空间的域是未知的,那么就很难提出一个比unordered_map更快的通用解决方案。

在这种情况下,密钥空间的域是已知的:它被限制为ASCII字符。这很方便,因为您可以立即将项(char)转换为向量索引(std::size_t)。因此,您可以只使用每个字符的值作为vector的索引,而不是在每次查找时都对其进行散列。

但总的来说,不会过早优化。如果unordered_map是最自然的解决方案,我会从那里开始,然后分析,如果您发现性能不能满足您的需求,请查看重新设计您的解决方案。(这并不总是最好的建议;如果您知道您正在处理一段非常关键的代码,那么从一开始就需要考虑某些设计决策。如果您从不兼容的设计开始,那么以后再回来重构可能会困难得多。)

票数 4
EN

Stack Overflow用户

发布于 2019-01-24 04:38:24

因为只有256个可能的键,所以您可以使用256个计数的堆栈分配数组,这将比向量或unordered_map更快。如果为first.size()+second.size() < 128,则仅将实际发生的关键点的计数初始化为0。否则,memset整个数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54330963

复制
相关文章
【npm】npm install vs. npm update
工作中会经常用到npm install或是npm update,那这两个命令有什么区别呢
用户2845596
2021/01/21
2.3K0
VS Code中无法识别npm命令
今天在VS Code中执行npm install命令时报了“'npm' 不是内部或外部命令,也不是可运行的程序或批处理文件”的错误。
跟着阿笨一起玩NET
2019/12/24
12.1K0
VS Code中无法识别npm命令
APM vs NPM
APM:Application Performance Monitoring 的简称,即应用性能监控。NPM:Network Performance Monitoring 的简称,即网络性能监控。
东风微鸣
2022/04/22
2.1K0
VS扩展CodeMaid代码整理插件
本文章转载:http://www.cnblogs.com/wintersun/p/3577039.html
跟着阿笨一起玩NET
2018/09/19
3.1K0
VS扩展CodeMaid代码整理插件
从零开发一款基于 webview 的 vscode 扩展
在团队降本提效的基建中,洛竹开发了一款 vscode 插件,第一版我使用的是 vscode 内置 UI,虽说也能用,但是用户体验欠佳。由于 vscode 内置 UI 不够灵活,一番调研后我决定使用 webview 重构。
用户1250838
2021/09/18
4.9K0
从零开发一款基于 webview 的 vscode 扩展
安卓开发_WebView如何在Fragment中使用
之前学习了如何在activity中使用WebView控件来显示网页。 在我的实际开发中,有需要在Fragment中用到WebView控件的,那么就百度学习了一下 其实很简单,但是当然不是和在Activity中使用的方法一样 具体看代码 1 package com.example.qunxiong; 2 3 import android.os.Bundle; 4 import android.support.v4.app.Fragment; 5 import android.view.Layout
听着music睡
2018/05/18
3K0
使用typescript开发angular模块(发布npm包)
创建模块 初始化package.json文件 执行命名 npm init -y 会自动生成package.json文件如下,name默认为文件夹名称 { "name": "MZC-Ng-Api", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords"
易兒善
2018/08/21
1.3K0
使用typescript开发angular模块(发布npm包)
npm包–rimraf[通俗易懂]
rimraf 包的作用:以包的形式包装rm -rf命令,用来删除文件和文件夹的,不管文件夹是否为空,都可删除
全栈程序员站长
2022/11/17
1.1K0
发布npm包
Npm包管理器不用多讲,用过三大框架的应该都用过。今天讲一下怎么发布自己的npm包。
wade
2020/04/24
6380
引入gitlab仓库代码到npm包的教程
随着人类地发展,社会地进步,计算机技术地更新迭代,每一片码海里都有它宝贵的财富,每一座码山里都有着各自的秘密。怎么守住财富,隐藏一些秘密,成了一些开发人员所关心的事情。
江涛学编程
2022/07/30
9460
引入gitlab仓库代码到npm包的教程
Import VS From导入
模块是变量名得包,就是所谓得命名空间,而在包里面得变量名称为属性,属性简单来说就是绑定在特定对象(模块)上得变量名.
云深无际
2020/11/03
5980
Import VS From导入
【工具】发布NPM包
另外:后面会再总结一个系列,就是腾讯项目用到的技术点,有好多好多,可以供大家学习参考,让我们一起进步
神仙朱
2020/07/10
1K0
规范升级 NPM 包
在日常工作中,当组件跨项目使用时,我们往往会选择把组件抽成 npm 包。那么在 npm 开发以及发布的过程中有什么需要注意的事项吗?本文将从我自己的角度,来为大家介绍一下我认为的一些需要大家注意的点。
政采云前端团队
2022/12/01
8140
规范升级 NPM 包
nodejs常用npm包
用户1141560
2017/12/26
2.4K0
如何发布npm包
1、npm是什么? NPM (node package manager),通常称为node包管理器。顾名思义,它的主要功能就是管理node包,包括:安装、卸载、更新、查看、搜索、发布等。 npm 可以让 JavaScript 开发者在共享代码、复用代码以及更新共享的代码上更加方便。 当一个 JavaScript 开发者为了解决某个问题而编写了一些代码并将其共享出来的话,其他的开发者能够在自己的应用程序中复用这些代码,npm 让这些事情变得简单。 如果你使用了其他开发者开发的代码,你就可以很方便地使用 npm
小胖
2018/06/27
1.3K0
「译」提升 Web 开发效率的 VS Code 扩展
在我们开始之前,先看看你能否回答这个问题:Visual studio Code 和 Visual Studio 的区别是什么?
Chor
2019/11/08
7990
npm 更新package.json中依赖包版本
NPM可以使用npm-check-updates库更新版本 1、安装: cnpm install -g npm-check-updates 2、使用: ncu --timeout=10000000 -u 指定--timeout参数防止超时 更新全部到最新版本: cnpm install 为了防止版本冲突,可以先讲node_modules删掉
JadePeng
2020/05/29
1.7K0
如何使用npm发布自己的npm包
一. 创建 在npm的官网上注册一个账号,https://www.npmjs.com/ 1:在本地通过npm init 初始化一个项目,并建一个index.js 文件,因为index.js为默认进入的文件,如下: 2:在本地将该创建的项目打开,并在index.js编写想要写的文件(这里简单写一个排序),如下: 3:接下来通过npm login来登录你之前创建的npm账号,如下: 4:npm pubish 二. 使用 npm install 包名 三. 版本更新 更改版本号 重新发布
小吕
2022/09/26
3.8K0
如何使用npm发布自己的npm包
Vscode笔记-24款插件
首先当然是一些语言支持的插件,这个大家根据自己的需要安装就好了。平时编写什么语言,就安装什么语言的插件。
小城故事
2023/03/10
10.8K0
Vscode笔记-24款插件
如何使用npm发布自己的npm包
一. 创建 在npm的官网上注册一个账号,https://www.npmjs.com/ 1:在本地通过npm init 初始化一个项目,并建一个index.js 文件,因为index.js为默认进入的文件,如下: image-ab2ede5fb9d14ab8bb059eb63257c67c.png 2:在本地将该创建的项目打开,并在index.js编写想要写的文件(这里简单写一个排序),如下: image-1dc4644452b844869943897ce6cfd223.png 3:接下来通过npm
小吕
2022/06/16
1.5K0
如何使用npm发布自己的npm包

相似问题

如何在Chrome扩展中导入npm包

228

Shopify主题应用扩展导入npm包

19

在VS代码中,如何停靠Webview开发工具?

11

如何在开发中测试composer包,如symfony包

18

寻找类似于VS代码远程开发扩展包的IntelliJ远程开发体验

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文