我正在尝试使用 std::string 作为 stxxl::map 中的键插入对于大约 10-100 的少量字符串来说很好。但是在尝试在其中插入大约 100000 的大量字符串时,我遇到了分段错误。
代码如下:
struct CompareGreaterString {
bool operator () (const std::string& a, const std::string& b) const {
return a > b;
}
static std::string max_value() {
return "";
}
};
// template parameter <KeyType, DataType, CompareType, RawNodeSize, RawLeafSize, PDAllocStrategy (optional)>
typedef stxxl::map<std::string, unsigned int, CompareGreaterString, DATA_NODE_BLOCK_SIZE, DATA_LEAF_BLOCK_SIZE> name_map;
name_map strMap((name_map::node_block_type::raw_size)*3, (name_map::leaf_block_type::raw_size)*3);
for (unsigned int i = 0; i < 1000000; i++) { /// Inserting 1 million strings
std::stringstream strStream;
strStream << (i);
Console::println("Inserting: " + strStream.str());
strMap[strStream.str()]=i;
}
在这里我无法确定为什么我无法插入更多数量的字符串。我在插入“1377”时正好遇到分段错误。另外,我可以添加任意数量的整数作为键。我觉得字符串的可变大小可能会导致这个问题。
我也无法理解max_value
字符串的返回值。我只是返回了一个空白字符串。