STL地图的奇怪输出
strange output of STL map
C 程序员尝试调用 C++ 映射(以使用关联数组或散列的功能)。
字符串只是一个开始,后面会继续哈希二进制字符串。卡在了第一步。想知道为什么这个程序的输出只会 return 0。
#include <string.h>
#include <iostream>
#include <map>
#include <utility>
#include <stdio.h>
using namespace std;
extern "C" {
int get(map<string, int> e, char* s){
return e[s];
}
int set(map<string, int> e, char* s, int value) {
e[s] = value;
}
}
int main()
{
map<string, int> Employees;
printf("size is %d\n", sizeof(Employees));
set(Employees, "jin", 100);
set(Employees, "joe", 101);
set(Employees, "john", 102);
set(Employees, "jerry", 103);
set(Employees, "jobs", 1004);
printf("value %d\n", get(Employees, "joe"));
}
谢谢。
发现了两个错误(尚未):
printf("size is %d\n", sizeof(Employees));
必须是
printf("size is %d\n", Employees.size());
sizeof 给出对象的大小,而不是其中元素的数量。
int set(map<string, int> e, char* s, int value)
必须是
int set(map<string, int> &e, char* s, int value)
否则你给函数一个副本,而不是原始函数(如在 C 中)。副本将在离开函数范围后被丢弃。原文未改
C 程序员尝试调用 C++ 映射(以使用关联数组或散列的功能)。
字符串只是一个开始,后面会继续哈希二进制字符串。卡在了第一步。想知道为什么这个程序的输出只会 return 0。
#include <string.h>
#include <iostream>
#include <map>
#include <utility>
#include <stdio.h>
using namespace std;
extern "C" {
int get(map<string, int> e, char* s){
return e[s];
}
int set(map<string, int> e, char* s, int value) {
e[s] = value;
}
}
int main()
{
map<string, int> Employees;
printf("size is %d\n", sizeof(Employees));
set(Employees, "jin", 100);
set(Employees, "joe", 101);
set(Employees, "john", 102);
set(Employees, "jerry", 103);
set(Employees, "jobs", 1004);
printf("value %d\n", get(Employees, "joe"));
}
谢谢。
发现了两个错误(尚未):
printf("size is %d\n", sizeof(Employees));
必须是
printf("size is %d\n", Employees.size());
sizeof 给出对象的大小,而不是其中元素的数量。
int set(map<string, int> e, char* s, int value)
必须是
int set(map<string, int> &e, char* s, int value)
否则你给函数一个副本,而不是原始函数(如在 C 中)。副本将在离开函数范围后被丢弃。原文未改