我有一个std :: map mymap
现在,如果我在地图中插入值,如:
std::map <string, string> mymap;
mymap["first"] = "hi";
mymap["third"] = "how r you";
mymap["second"] = "hello";
Run Code Online (Sandbox Code Playgroud)
现在我想迭代地图并以排序(键)方式打印值:
map<string, string>::iterator itr;
for(itr = mymap.begin(); itr != mymap.end(); itr++)
{
string newline = itr->second;
cout << newline << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出应该是:
hi
hello
how r you
Run Code Online (Sandbox Code Playgroud)
我认为默认情况下,地图存储按排序键方式存储,但我在输出中得到的输入与输入相同.我需要为此提供我的排序功能,还是需要在迭代地图之前做一些额外的事情?
我只是想学习二进制堆,并对在二进制堆中执行删除操作有疑问.我已经读过我们可以从二进制堆中删除一个元素,我们需要重新封装它.
但在以下链接中,它表示不可用:
http://en.wikibooks.org/wiki/Data_Structures/Tradeoffs
Binary Search AVL Tree Binary Heap (min) Binomial Queue (min)
Find O(log n) O(log n) unavailable unavailable
Delete element O(log n O(log n) unavailable unavailable
Run Code Online (Sandbox Code Playgroud)
我对此感到困惑.
提前感谢所有澄清.
我想从Tcl中的列表中删除子列表.我知道如何使用主列表,lreplace
但我不知道如何为子列表.例如:
set a { 1 2 { {3 4} { 4 } } }
Run Code Online (Sandbox Code Playgroud)
现在我想{4}
从内部列表中删除{ {3 4} {4} }
.最终的清单应该是:
a { 1 2 { {3 4} } }
请建议如何点他的.
我有一个问题,我想在进行深度复制时克隆对象指针。就像我有 T* t1 并且我想以 *t1.x= *t2.x 的方式创建一个新的对象指针 T* t2。
编写一个复制构造函数,其工作方式如下:
T(const T* cpy)
{
m_var = (*cpy).m_var;
}
T* t1 = new T;
T* t2(t1);
Run Code Online (Sandbox Code Playgroud)
如果使用上述方法,我应该注意什么?
谢谢鲁奇
我们如何在类的构造函数中初始化结构指针.例:
struct my_struct{
int i;
char* name;
};
class my_class{
my_struct* s1;
my_class() {
// here i want to make s1->i = 10; and s1->name = "anyname" ;
// should i assign it like s1->i= 10; and call new for s1->name and strcpy(s1->name "anyname");
// it compiles in g++ without any warning/error but gives seg fault at run time
}
};
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
int main()
{
char* s = (char*) malloc(sizeof(char)*10);
s="hello";
free(s);
}
Run Code Online (Sandbox Code Playgroud)
执行此程序时,我收到一个错误:
** glibc detected *** free(): invalid pointer: 0x0000000000400b2c
我对这个错误的研究表明它可能是由于没有分配足够的内存空间引起的malloc()
.但程序已经调用malloc()
,产生足够的空间10 char
秒.
我有关于std :: map的查询.
如果我有一个std :: map,如:
std::map <T1, T2*> my_map;
T1 t;
T2* tt = new T2;
my_map[t]=tt;
Run Code Online (Sandbox Code Playgroud)
谁负责清理这个容器,T2的析构函数会处理它(T2*tt).此外,如果我想在整个程序中保留此容器,我应该在哪里清理它.
谢谢
以下代码给出了使用g ++的错误的alloc :
std::bad_alloc what(): "St9bad_alloc"
. 我无法理解原因,因为这是我添加的第一个元素,vector
因此不存在内存限制问题
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class MyCity {
string name;
std::vector<pair<string,double> > neighbours;
public:
MyCity(string s)
{
name =s;
// neighbours.clear();
}
MyCity(string s, string s1, double d)
{
name = s;
neighbours.push_back(std::make_pair(s1,d));
}
};
class MyState {
vector<MyCity*> cities;
string name;
public:
MyState() { }
MyState(string s)
{
name =s;
}
bool add_city(string name, string neigh, double d)
{
MyCity* c = new MyCity(name,neigh,d);
cities.push_back(c); …
Run Code Online (Sandbox Code Playgroud)