比较字符串的瓶颈

2024-04-05

这是一个后续问题C++ 中的 Char* 与 String Speed https://stackoverflow.com/q/3989111/363829。 我声明了以下变量:

std::vector<std::string> siteNames_;
std::vector<unsigned int> ids_;
std::vector<std::string> names_;

我调用这个函数数万次,这是一个主要瓶颈。有没有更有效的方法来比较字符串?答案必须是跨平台兼容。

unsigned int converter::initilizeSiteId(unsigned int siteNumber){
    unsigned int siteId = 0;
    for (unsigned int i = 0; i < ids_.size(); i ++){
        if (siteNames_[siteNumber].compare(names_[i]) == 0){
            siteId = ids_[i];
            break; // Once found, will stop searching and break out of for loop
        }
    }
    if (siteId == 0)
        std::cerr << "Could not find ID for site number " << siteNumber << std::endl;

    return siteId;
}

Use a map http://www.cplusplus.com/reference/stl/map/ or 无序映射 http://publib.boulder.ibm.com/infocenter/comphelp/v9v111/index.jsp?topic=/com.ibm.xlcpp9.aix.doc/standlib/stl_unordered_map.htm反而。然后你可以这样做:

std::map<string, int>names_;
// ...

unsigned int converter::initilizeSiteId(unsigned int siteNumber){
    unsigned int siteId = 0;
    std::map<string, int>::iterator i = names_.find(siteNames_[siteNumber]);
    if (i != names_.end()){
        siteId = i->second;
    }
    else (siteId == 0)
        std::cerr << "Could not find ID for site number " << siteNumber << std::endl;

    return siteId;
}

这将在 O(log n) 时间内执行,而不是之前的 O(n) 时间。

如果您有排序列表,还有其他选项,例如二分查找 http://en.wikipedia.org/wiki/Binary_search_algorithm.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较字符串的瓶颈 的相关文章

  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 主构造函数不再在 VS2015 中编译

    直到今天 我可以使用主构造函数 例如 public class Test string text private string mText text 为了能够做到这一点 在以前的 Visual Studio CTP 中 我必须将其添加到 c
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include

随机推荐

  • 如何将 SqLite 与 BlackBerry OS 4.5 一起使用?

    我目前在 BlackBerry 中使用持久存储 我想在 BlackBerry OS 4 5 中使用 SqLite 数据库 但我找不到任何相关教程 我可以在 BlackBerry OS 4 5 中使用 SqLite 还是需要其他版本的 Bla
  • Android 小部件的两个按钮以不同的意图调用相同的 Activity

    我在 Android 中有一个带有两个按钮的主屏幕小部件 两个按钮都应该调用相同的活动 类 只需使用不同的意图加上意图附加 即可知道哪个按钮调用了该类 目前只有 Button1 正在工作并调用该活动 我还在被调用的活动中收到键值 我怎样才能
  • 终端中的 LESS css 编译器帮助

    我使用 Ubuntu 13 04 Linux 我已经安装了node和npm 使用 npm 我通过终端下载的内容更少 我在我的简单 HTML CSS 项目中使用了它 纯前端 它不是 Ruby 或 Nodejs 项目 当我这样做时 lessc
  • Prolog 追加与剪切运算符

    当我们使用append和cut操作符时会出现什么问题 append2 L L append2 H T L H TL append2 T L TL 我尝试了几种不同的输入 但总是成功 append2 1 2 5 L L 1 2 5 appen
  • XPath 中字符串的连接函数

    我正在尝试使用 XPath 获取完整的地址 我是 XPath 新手 这是我到目前为止所做的 p class adr span class street address 2222 Warnar Ave span span class coun
  • FacebookDisplayName 有何用途?

    我们目前正在更改使用 Facebook SDK 进行登录的应用程序的名称 实际上没有其他任何操作 这意味着对于未更新的用户 Facebook 应用程序的名称将与FacebookDisplayName 在我的测试过程中 我找不到对价值的任何影
  • 将 Access-Control-Allow-Origin 添加到 PHP 标头

    我正在尝试解决 WebGL 应用程序上的 CORS 限制 我有一个可以解析 URL 并返回图像的 Web 服务 由于此 Web 服务未启用 CORS 因此我无法使用返回的图像作为纹理 我本来打算 编写 PHP 脚本来处理图像请求 图像请求将
  • Java 中的树实现

    我得到了以下树 然后我们被告知使用last child previous sibling方法来改变这三个的实现 结果如下 我现在正在研究 Java 实现 以在这棵树上执行不同的功能 我们有一个 Tree 接口和一个 TreeNode 接口
  • 如何在java中查找自1970年以来的秒数

    我正在处理一个实时项目 其中我需要查找自 1970 年 1 月 1 日以来的秒数 我使用以下代码来查找秒数 但给出了错误的结果 代码如下 public long returnSeconds int year int month int da
  • 自定义Zuul异常

    我在 Zuul 中有一个场景 其中 URL 路由的服务也可能已关闭 因此 响应正文会在 JSON 正文响应中抛出 500 HTTP Status 和 ZuulException timestamp 1459973637928 status
  • Node webpack 开发服务器在 vuejs 项目中失败“无法获取/”

    当我通过 webpack 运行节点开发服务器时 我的浏览器上收到一条非常无用的消息 Cannot GET 我正在使用以下内容构建 Vuejs 应用程序 Vue Js 的结构是由这个决定的Vue模板 http vuejs templates
  • 相当于python3中的python2 chr(int)

    python2 print chr 174 python3 print chr 174 我正在寻找 python2 中 chr 的等效项 我相信这是由于 python 3 返回 unicode 字符而不是 ASCII 实际上 在Py3中ch
  • C 如何计算没有浮点精度的百分比(千)

    如何将 2 个 int 值的百分比计算为表示百分比的 int 值 更精确的是千分之一 背景 目的 使用没有 FPU 的处理器 浮点计算所需的时间要长 100 倍 int x 25 int y 75 int resultPercentage
  • Ionic APP 中的 Disqus

    我正在尝试在我的 ionic 应用程序中实现 disqus 评论 我知道我必须将其托管在其设置的域上 我相信我已正确配置该域 欢迎任何帮助 这是我的 app js 中离子应用程序的代码 scope showComments function
  • 为什么我可以使用 bot.get_user 函数获取一些用户,但不能获取其他用户? [不和谐.py]

    我当时正在忙着一天的事情并做学校作业 我去了我的不和谐服务器来检查一天中声誉和排行榜进度如何变化 当我使用该命令时 我收到错误 Nonetype object has no attribute display name 所以我很自然地转到运
  • 从另一个类访问静态成员函数

    我在 C 类中有一个静态 stl 映射 并且有另一个静态成员函数来返回指向映射中对象的常量指针 该映射对于该类中的所有对象都是通用的 唯一的问题是 我需要搜索这个映射并从另一个类 位于不同的 cpp h 文件中 设置它 当我尝试在 vs20
  • 是否有一种无点方法将条件检查转换为输入的 Maybe 类型?

    我只是在 haskell 中完成一些简单的练习 想知道是否有一种无点的方法将 if then else 语句转换为Maybe type Nothing如果条件为假则返回 并且Just如果条件为真则输入 简而言之 给出一些 maybeIf a
  • 将我现有的富文本 UI 与 CKEditor API 结合使用

    我有一个现有的富文本 UI 我想将其与 CKEditor 一起使用 基本上 我希望 CKEditor 能够处理应用样式 格式 过滤和规范化插入内容的复杂部分 我现有的 UI 需要驱动交互并根据选择显示状态 即 选择粗体文本应反映在 UI 中
  • 如何在不使用 Github 的情况下使用 Git 在项目中进行协作?

    我是 Git 和 Github 的初学者 但仍然对它们感到困惑 据说我们在与其他人协作时可以不用Github而使用Git 然而 也有人说 Git 可以在本地计算机上运行 如果我们不使用 Github Git 只能在本地运行 我们如何进行协作
  • 比较字符串的瓶颈

    这是一个后续问题C 中的 Char 与 String Speed https stackoverflow com q 3989111 363829 我声明了以下变量 std vector