2 meng 521 meng_521 于 2016.03.30 15:12 提问

hash_map,unordered_map以string作为键,插入一千多万条数据后崩溃

代码:
#include "stdafx.h"
#include"iostream"
#include
#include
#include
#include
#include
using namespace std;

typedef hash_map myMap;
void CharsAllSequen(myMap &resultMap, string &str, unsigned int n, double defaultVal);
void Clear0ForStrQuen(myMap &resultMap);

int main()
{

myMap totalMap;
myMap resultMap;
string str;
CharsAllSequen(resultMap, str, 6, 0.00323223);
    stringstream ss;
for (int i = 0; i < 3000; i++)
{
    myMap::iterator iter;
    for (iter = resultMap.begin(); iter != resultMap.end(); ++iter)
    {
        string strTemp = iter->first;
        ss.str("");
        ss.clear();
        ss << "_";
        ss << i;
        strTemp += ss.str();
        totalMap.insert(myMap::value_type(strTemp, iter->second + i / 3001.0));
    }
}

return 0;

}

void Clear0ForStrQuen(myMap &resultMap)
{
myMap::iterator iter = resultMap.begin();
while (iter!=resultMap.end())
{
iter->second = 0;
++iter;
}
}
//获取特定长度,由0,1,2,3四个字符组成的字符串,比如010203,作为key,值设置为defaultVal
void CharsAllSequen(myMap &resultMap, string &str, unsigned int n, double defaultVal)
{
if (n==0)
{
if (str.size()>0)
{
resultMap.insert(myMap::value_type(str, defaultVal));
}
else
{
return;
}

}
else
{
    for (int i = 0; i < 4; i++)
    {
        stringstream ss;
        ss << i;
        string temp = ss.str();
        str.append(temp);
        CharsAllSequen(resultMap, str, n - 1, defaultVal);
        str = str.substr(0, str.size() - 1);
    }
}

}

图片说明

3个回答

qq_34509904
qq_34509904   2016.04.01 21:08
已采纳

引发这个错误的原因是内存不足,在诊断工具里看下内存吧

meng_521
meng_521 确实是内存不足,通过更改编译器一个选项,允许大地址内存使用解决了
2 年多之前 回复
CSDNXIAON
CSDNXIAON   2016.03.30 15:23

map hash_map unordered_map 性能测试
map, hash_map,unordered_map
map, hash_map,unordered_map
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

qq_34509904
qq_34509904   2016.04.01 21:09
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
unordered_map以char *作为key值
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。 不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。 嗯,总的来说,按照查找效率排名:unordered_map
hash_map自定义key类型的使用
hash_map自定义key类型的使用
用std::pair做Unordered_map的key(C++)
默认情况下unordered_map只支持primitive type作为其key,若使用用户自定义的key,需要传入用户自定义的hash function。 代码如下 struct pair_hash { template std::size_t operator () (const std::pair &p) { auto h1 = std::hash{}(p.first)
hash_map,unordered_map的使用
STL容器的学习与使用
map,hash_map和unordered_map 实现比较
map介绍 Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的
map hash_map unordered_map 性能比较
原文地址http://blog.chinaunix.net/uid-20384806-id-3055333.html by zieckey 测试条件: gcc version 4.2.1 20070719  [FreeBSD] FreeBSD  7.2-RELEASE #0: Fri May  1 07:18:07 UTC 2009     root@driscol
STL: unordered_map 自定义键值类型的使用(C++)
当试图使用自定义类型作为 unordered_map 的键值时,则必须为自定义类型定义 Hash 函数与相等的判断条件。我们先定义自定义类型作键值,代码如下: struct KEY { int first; int second; int third; KEY(int f, int s, int t) : first(f), second(s), third(t){} };
hash_map和unordered_map的使用
哈希表又名散列表,它可以帮助我们gaoxiao
STL中的map、unordered_map、hash_map
 在之前使用STL时,经常混淆的几个数据结构,特别是做Leetcode的题目时,对于使用哪一个map,一直没有太明确的概念,事实上,三个容器,有着比较大的区别. 1. map   内部数据的组织,基于红黑树实现,红黑树具有自动排序的功能,因此map内部所有的数据,在任何时候,都是有序的。 2. hash_map   基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是
用unordered_map代替hash_map
利用unordered_map代替hash_map 实验环境 操作系统 fedora9编译器版本 gcc4.3 实验方式 各种map使用插入和查找,比较速度和相关性能 下面测试说明了速度之间的比较: map类型 插入速度 插入和查找速度 hashmap 0m0.123s 0m0.369s map