草庐IT

map_region

全部标签

c++ - 在 c++ 中加速 map<string,int> .find() 的最快方法。按键按字母顺序排列的位置

我有一张包含大约100,000对的map。有什么方法可以在使用find()时加快搜索速度,因为键是按字母顺序排列的。另外我应该怎么做。我知道您可以在创建map时指定一个新的比较器。但这会加速find()函数吗?提前致谢。[已解决]感谢一群人,我决定使用vector并使用下界和上界来“剪断”一些搜索。我也是新来的,有什么方法可以将这个问题标记为已回答,或者选择一个最佳答案吗? 最佳答案 不同的比较器只有在设法更快地进行比较时才会加快查找速度(这对于字符串通常非常困难)。如果您基本上是按顺序插入所有数据,然后进行搜索,则使用std::v

c++ - map 什么时候变得比两个 vector 更好?

map对其所有元素进行二分搜索,这具有对数复杂度——这意味着对于足够小的对象集合,map的性能将低于具有线性搜索的两个vector。对象(键)池应该有多大才能使映射的性能开始优于两个vector?编辑:问题的更一般化版本:对象池应该有多大才能使二分搜索的性能优于线性搜索?我使用字符串作为键,值是指针,但我的特定用例可能无关紧要。我比较想了解如何正确使用这两个工具。 最佳答案 如果你能原谅我这么说的话,大多数答案对我来说就像是在用各种方式说:“我不知道”,而不是真的承认他们不知道。虽然我大体上同意他们给出的建议,但他们似乎都没有尝试直

C++,通过 const 引用访问 std::map 元素

我对const有疑问。说我有:classA{friendstd::ostream&operatorsomeMap;intsomeInteger;};std::ostream&operator由于与map的const冲突,这种代码在编译时会产生错误(如果我注释掉打印map值的那一行就没问题),如果我去掉函数原型(prototype)中的“const”很好。我真的看不出问题在哪里..有什么帮助吗? 最佳答案 std::map::operator[]不是const,因为如果元素不存在,它会插入一个元素。在C++11中,你可以使用std::

c++ - 如何使用基于范围的 for 循环修改 map 中的值?

我有一个基于范围的for循环来迭代foobar中的元素,如下所示:#include#includeintmain(){std::mapfoobar({{1,1},{2,2},{3,3}});for(autop:foobar){++p.second;std::cout此代码产生以下输出:{1,2}{2,3}{3,4}{1,1}{2,2}{3,3}第一行在for循环中被修改和打印,第二行应该打印相同的修改值。为什么输出不匹配?对std::map的更改是否仅在循环范围内有效?有没有一种方法我不仅可以访问而且可以修改这些值?Arunningversionofthiscode可以在cpp.sh上

c++ - 减少冗长 : inserting elements into map

我最近在熟悉C++11,auto关键字很棒!打字:for(autobar:bars){太令人满意了。保持代码的可读性和美观。仍然感觉它停止了你所有的动力如下:foo.insert(std::pair("soVerbose",baz));//Asopposedtosimply:foo.insert("soVerbose",baz);它是这样的有充分的理由吗?有什么巧妙的方法可以让它不那么冗长吗?我知道[]运算符可用于将元素插入map,但功能略有不同。 最佳答案 使用emplace功能:#include#include#includei

c++ - 为什么 map<bool,int> m={{1,2},{3,4},{5,0}};尺寸 1 而不是 3?

很奇特:mapmb={{1,2},{3,4},{5,0}};coutmi={{1,2},{3,4},{5,0}};cout打印出来13 最佳答案 std::map是唯一键。1,3,5所有产量true转换为bool时. 关于c++-为什么mapm={{1,2},{3,4},{5,0}};尺寸1而不是3?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/28596881/

c++ - LLDB:如何检查 unordered_map

大多数其他STL容器打印良好,但unordered_map是一个烂摊子。我使用operator用于打印,但这与打印无关,这是关于当我崩溃并且我想从LLDB提示符打印出我的哈希值时。我不能调用类似callcout的东西因为那行不通。除了例如,没有其他解决方案吗?链接本身使用cout的模板函数?那行得通吗?(我正在尝试,但它不起作用,因为我必须提前知道模板参数类型是什么,以便为它们生成和链接代码) 最佳答案 您应该能够检查unordered_map对象本身,而无需对其调用方法。例如,以这个简单的程序为例:#include#include

c++ - C++中Concurrent Queue + map的实现

我不太擅长数据结构,所以这可能是个很愚蠢的问题。我正在寻找一种方法来实现队列+map的混合行为。我目前正在使用tbb::concurrent_bounded_queue(记录在Intel'sdeveloperzone)来自www.threadingbuildingblocks.org在多线程单生产者单消费者进程中。该队列具有市场数据报价对象,并且流程的生产者端实际上对时间高度敏感,因此我需要的是一个以市场数据标识符(如USDCAD、EURUSD)为键的队列。Value指向(通过unique_ptr)我收到的有关此key的最新市场数据报价。所以,假设我的队列有5个元素对应5个唯一标识符,

c++ - 在 Rcpp 中用(西类牙语)重音词对 map 进行排序

虽然我可以通过在std::sort中指定UTF-8语言环境来成功地对带有重音元音的西类牙语单词进行排序,//[[Rcpp::export]]std::vectorsort_words(std::vectorx){std::sort(x.begin(),x.end(),std::locale("en_US.UTF-8"));returnx;}/***Rwords我不知道如何用map做同样的事情://slightlymodifiedversionoftableConhttp://adv-r.had.co.nz/Rcpp.html//[[Rcpp::export]]std::maptable

c++ - 有了一些 map 和一些根,我们想遵循什么标准算法有助于创建路径?

我们有一些点集(每个点都有它的X和Y)和多个根图[point,point]。我们可以通过根从任何点移动到任何可能的方向。我们得到了一些我们想要尽可能接近的2d点路径:如何计算这样的路径:这看起来与给定路径尽可能相似?什么是可以做这样的事情的有用算法(并且在BoostGeometry或Graph或任何其他常见的开源C++库中实现)? 最佳答案 这是一个非常可爱的小问题。如果你的图表连接良好,贪婪的方法可能会很有效。如:(1)将当前位置设置为最接近路径起点的节点,(2)移动到最接近路径中下一个点的相邻节点,直到没有更近的点,(3)选择路