① VC中怎么用map
1、使用map
使用map得包含map类所在的头文件
#include <map> //注意,STL头文件没有扩展名.h
map对象是模板类,需要关键字和存储对象两个模板参数:
std:map<int, string> personnel;
这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.
为了使用方便,可以对模板类进行一下类型定义,
typedef map<int, CString> UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;
2、在map中插入元素
改变map中的条目非常简单,因为map类已经对[]操作符进行了重载
enumMap[1] = "One";
enumMap[2] = "Two";
.....
这 样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个 空字符串,插入完成后,将字符串赋为"Two"; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。可以用以下方法来避免开销:
enumMap.insert(map<int, CString> :: value_type(2, "Two"))
3、查找并获取map中的元素
下标操作符给出了获得一个值的最简单方法:
CString tmp = enumMap[2];
但是,只有当map中有这个键的实例时才对,否则会自动插入一个实例,值为初始化值。
可以使用Find()和Count()方法来发现一个键是否存在。
查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.
int nFindKey = 2; //要查找的Key
//定义一个条目变量(实际是指针)
UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey);
if(it == enumMap.end()) {
//没找到
}
else {
//找到
}
通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据 iterator->first 和 iterator->second 分别代表关键字和存储的数据
4、从map中删除元素
移除某个map中某个条目用erase()
该成员方法的定义如下
iterator erase(iterator it); //通过一个条目对象删除
iterator erase(iterator first, iterator last); //删除一个范围
size_type erase(const Key& key); //通过关键字删除
clear()就相当于 enumMap.erase(enumMap.begin(), enumMap.end());
② vc使用map的问题
在第一行加入下边的代码:
#pragma warning(disable:4786)
③ VC中的.map文件是什么,有什么作用,怎样发挥作用
map文件是编译时的一些静态信息。包括地址、类、函数等。在程序崩溃时可以根据地址查找异常的位置。但在工程中需要设置相关编译参数。
④ java里map底层是通过什么实现的队列和键值有什么区别
它的实现原理有些类似于二维数组,但是新的HashMap集合,是采用异步方式来实现的,它的效率较高!老的TableMap是同步实现的的,所以现在不推荐用这个,有时间可以看看底层代码,一看就明白了,很简单的
⑤ hashmap和concurrenthashmap的区别,hashmap的底层源码
你好。 有并发访问的时候用ConcurrentHashMap,效率比用锁的HashMap好 功能上可以,但是毕竟ConcurrentHashMap这种数据结构要复杂些,如果能保证只在单一线程下读写,不会发生并发的读写,那么就可以试用HashMap。ConcurrentHashMap读不加锁,写...
⑥ C/C++ VC++ map的模版有key和value 现有一张ini的文件 存放的形式 是section下的多个key分别对应value
表述不是很清楚,不明白你的section指的什么。。。
大意看明白了,讲一下思路吧
你的问题实际上是map的嵌套,可以这样定义:
multimap<string,map<string,int> >;这里假设两个key是string类型,value是int型
这里的问题是你的第一个key可能没有,可以自己插入一个相同的,所有这里用的是multimap;
然后定义ifstream对象来打开并关联你的ini文件,用while(getline())逐行读取内容,
再定义istringstream读取单词,定义计数器计数每行的单词数。
如果是3,直接插入multimap<string,map<string,int> >
如果是2,先插入第二个map<string,int>,然后自定义一个string,与前者构造make_pair()再插入
multimap<string,map<string,int> >中
后面的就是查找,删除
最后输出时注意去掉你自定义的第一个key.
以上应该够清楚了吧。。。
⑦ 什么叫底层代码
底层代码是指被封装好的代码,底层代码写的就是比较原始,比较基础的代码。底层代码编写是非常接近机器的编程,使用底层开发语言(如C或汇编)。这与使用高级语言(例如Python,Java)的程序员进行编程不同。
对于java来说,底层代码一般是指框架的实现代码,这些代码一般都是一些常用代码或比较接近于原始的代码,这些代码封装好,可以方便复用和调用。而对一些操作系统来说,底层代码可能就是c或者汇编,写底层代码就是做底层开发。比如java的Map类,底层代码实现:
(7)vc底层map源码扩展阅读
编写底层代码一般要比较深厚的功底,对程序设计,代码涉及的各个方面,性能,耦合度,复用性都要很深的掌握和考虑,熟练掌握设计模式,良好的编程习惯,代码优雅,数据结构,精通各种算法。
很多java框架被淘汰,除了本身有致命的bug外,还有就是有性能更好,使用更方便的框架出现,而这些都是靠底层代码实现来决定的。
⑧ 用MapObjects进行GIS二次开发,VB/VC那个环境更好一些
对于MapObjects ,它的架构比较接近vc,有相当一部分程序员是采用vc进行开发的,但是由于vc的MFC难度较大,不容易掌握,使用起来也比较复杂,所以在很大程度上削弱了vc的优势.另外一点,MapObjects 的很多参考资料包括其自带的帮助文件都使用vb做例子,加之vb非常易用,所以,vb也有很大市场.
我个人的观点是如果你vc掌握的更好,那最好就用vc,不行就用vb.另外,要看你做什么深度的开发,初级的应用vb就可以胜任,但是比较深的开发还是要靠更接近底层的vc.
⑨ VC++ 关于STL 中MAP 内部内容该如何修改呢最好有个例子解说下!谢谢 !求救!
map中可以用迭代器修改value值和访问key值,但是key值是不允许修改的.这也是map容器所规定的.如果一定要修改key值,只有以一个value相同的新元素替换掉旧元素.
修改value值很方便:
map<T1, T2>::iterator pos;
//由pos指向要修改的值
pos->second = ....
//这样直接赋值就可以修改value值了
修改key值只能用新元素替换
下面是一个泛化函数:
template<class T>
inline
bool replace_key(T &c, const typename T::key_type &old_key, const typename T::key_type &new_key)
{
typename T::iterator pos;
pos = c.find(old_key);
if(pos != c.end())
{
c.insert(typename T::value_type(new_key, pos->second));
//插入新key值,以原来对应key的value值继续作为value值插入
c.erase(pos);
//擦去旧的元素.这样就完成了key值的改变
return true;
}
else
return false;
}
⑩ VC .map文件 源码免杀
......换杀毒软件