源代码太长,就不贴出来了,简单描述一下:
定义了一个结构体,在类U中被作为map值类型,类M有一个类U类型的数组。
struct A{
string name;
double value;
};
class U{
public:
map<int, A> param;
....................
void setParam(int, A);
..................
};
void U:: setParam(int s, A pa){
param.insert(pair<int,A>(s, pa));
}
class M{
public:
U multi[20];
...................................
void initM();
};
void M:: initM(){
for(int i=0; i<20; i++){
string someStr;
A initPa = {someStr, 0.0};
multi[i].setParam(i, initPa);
}
}
编译链接没有问题
编译器g++ 4.3.3 系统ubuntu
运行时报错:segmentation fault
gdb后给的信息是类似:
std::_Rb_tree map <int, std::pair <int const, A> std::_Select1st map <int, std::pair <int const, A> std::less <int>, std::allocator <std::pair <int const, A> > >::insert_unique(std::pair <int const, A> const&)
最早是觉得是map的错,google的结果是很有可能其他操作破坏了结构体A initPa, 但是检查之后并没有发现有其他操作使用了这个变量,最后在声明map<int, A> param 的地方 加了关键字struct 改为 map<int, struct A> param。程序竟然神奇的运行了……
我印象里c++是不需要关键字struct来定义变量的,但是不知道为什么这里要加这个。而且,如果没有第二个类M,直接操作U类,是没有这样的问题的…………
求解…………
分享到:
相关推荐
在这个场景中,我们关注的是在C++ STL中的`map`容器中,使用字符串(`std::string`)作为键(key)与使用自定义结构体(struct)作为键在查找效率上的比较。`map`是一个关联容器,它提供了基于键的有序存储,通常...
在C++编程中,STL(Standard Template Library,标准模板库)是一个不可或缺的部分,它提供了高效、可重用和模块化的代码实现。STL的核心组件包括容器、迭代器、算法和函数对象。在这个主题中,我们将深入探讨四个...
- 在多节点树中,`map`可以用来表示节点之间的层级关系,键可能是父节点的标识,值则可以是子节点的引用或结构体。 2. **STL中的`vector`**: - `vector`是一个顺序容器,可以容纳任意类型的元素,并且支持随机...
在这个基于STL的简易字典项目中,我们利用了STL中的容器(如`std::map`)和输入/输出(IO流)功能来实现一个能够读取文件、存储和查询字典数据的程序。以下是这个项目的详细知识点: 1. **STL中的`std::map`**: `...
结构体可以作为标准模板库(STL)中的容器(如vector、list、map等)的元素类型,方便进行数据的集合管理。 10. **结构体与封装** 在面向对象编程中,结构体可以用来实现简单的数据封装,但缺乏类的一些高级特性,...
3. **Map**: Map是STL中的另一种关联容器,它将键值对映射到关联的值。C语言实现可能使用平衡二叉搜索树(如AVL树或红黑树)来保持键的排序。这使得可以快速查找、插入和删除键值对。 4. **基本数据结构**: 在C语言...
例如,可以定义一个包含整型和字符串的结构体`StudentInfo`,并重载`运算符,以便`map`可以正确排序这些元素。 8. **迭代器操作**: - `lower_bound(key)`返回第一个大于等于key的元素的迭代器。 - `upper_bound...
在C++中,STL中的`std::map`通常基于红黑树实现,提供了O(log n)的时间复杂度进行插入和查找操作。在libcstl中,可能会使用类似的数据结构来实现这个功能。 2. **Tree**:在C++ STL中,`std::set`和`std::multiset`...
C语言不支持面向对象,所以C实现的STL可能会使用结构体和函数指针来模拟类和继承的概念。 在"CSTL-1.0.0"这个压缩包中,你可能会找到上述各种组件的实现源代码,通过阅读和分析这些代码,你可以更深入地理解STL的...
STL(Standard Template Library),即标准模板库,是C++的一个核心特性,包含一系列模板类和函数模板,如vector、list、map、set等容器,以及迭代器和算法。STL的使用可以使得代码更加模块化、高效,同时减少错误的...
在本项目中,"c++实战-基于STL的演讲比赛流程管理系统" 是一个使用C++编程语言设计和实现的应用程序,重点在于利用标准模板库(Standard Template Library, STL)来构建一个高效、灵活的演讲比赛流程管理工具。STL是...
在C++ STL中,`hash_map`正是用来实现这种高效键值对存储的数据结构。 #### 1. 数据结构:hash_map原理 `hash_map`的基础是哈希表。哈希表的主要优势在于,它能够极大地减少数据存储和查找所需的时间,接近于常数...
1. 定义节点结构:创建一个结构体或类,表示红黑树的节点,包括键、值、颜色、左子节点、右子节点以及父节点等属性。 2. 实现基本操作:实现插入、删除、查找等基本操作,确保这些操作能在O(log n)的时间复杂度内...
最后,系统的其他功能,如评委随机打分,可能涉及到STL的`std::unordered_map`或`std::map`。这些关联容器可以将评委的ID与他们的评分关联起来,方便查询和统计。 综上所述,这个实践案例展示了C++ STL容器在实际...
只需要将上面的`set`替换为`map`,并确保键类型(而非值类型)支持自定义的比较逻辑。例如,如果`map`的键是`ST_Message`,那么我们需要在`ST_Message`中定义`运算符,或者为键提供一个仿函数。 总之,STL的`set`和...
在C++编程中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它提供了一组高效且灵活的数据结构和算法。在这个“c++ stl list实现简单的学生信息管理系统”中,我们主要关注的是使用STL中的`...
假设我们接到一个项目,需要实现一个通用的容器,能够支持插入多种不同的普通类型(如 int、char、float、double 等)和自定义结构体或类的对象,并能根据每种不同类型的比较规则从容器中获取最大或最小的值或对象。...
然而,C语言本身并不包含类似C++中的标准模板库(Standard Template Library, STL),STL提供了一组高效的数据结构和算法,极大地提升了代码的可读性和复用性。为了弥补这一不足,许多开发者会创建自己的集合库,以...