map遍历判断最后一条(map的三种遍历方式)
c++ map问题:如何指向map中最后一个元素?
end是map的尾部,没有实际元素,可以 iter = map.end(); iter --;
总结了一些map基本简单实用的操作:
map最基本的构造函数;
mapstring , int mapstring;?????????mapint ,string mapint;
mapsring, charmapstring;?????????map char ,stringmapchar;
mapchar ,intmapchar;????????????mapint ,char mapint;
2.?map添加数据;
mapint ,string maplive;
1.maplive.insert(pairint,string(102,"aclive"));
2.maplive.insert(mapint,string::value_type(321,"hai"));
3, maplive[112]="April";//map中最简单最常用的插入添加!
3.map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
mapint ,string ::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout"we do not find 112"endl;
else cout"wo find 112"endl;
4,map中元素的删除:
如果删除112;
mapint ,string ::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout"we do not find 112"endl;
else??maplive.erase(l_it);??//delete 112;
5,map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:
#include map
#include iostream
using namespace std;
int main( )
{
map int, int m1, m2, m3;
map int, int::iterator m1_Iter;
m1.insert ( pair int, int??( 1, 10 ) );
m1.insert ( pair int, int??( 2, 20 ) );
m1.insert ( pair int, int??( 3, 30 ) );
m2.insert ( pair int, int??( 10, 100 ) );
m2.insert ( pair int, int??( 20, 200 ) );
m3.insert ( pair int, int??( 30, 300 ) );
cout "The original map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout " " m1_Iter-second;
cout??? "." endl;
// This is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap( m2 );
cout "After swapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout " " m1_Iter - second;
cout?? "." endl;
cout "After swapping with m2, map m2 is:";
for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
cout " " m1_Iter - second;
cout?? "." endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout "After swapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout " " m1_Iter - second;
cout??? "." endl;
}
6.map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
For example:
#include map
#include iostream
using namespace std;
int main( )
{
map int, int m1;
map int, int::iterator m1_Iter;
m1.insert ( pair int, int??( 1, 20 ) );
m1.insert ( pair int, int??( 4, 40 ) );
m1.insert ( pair int, int??( 3, 60 ) );
m1.insert ( pair int, int??( 2, 50 ) );
m1.insert ( pair int, int??( 6, 40 ) );
m1.insert ( pair int, int??( 7, 30 ) );
cout "The original map m1 is:"endl;
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout ??m1_Iter-first" "m1_Iter-secondendl;
}
The original map m1 is:
1 20
2 50
3 60
4 40
6 40
7 30
请按任意键继续. . .
7,???map的基本操作函数:
C++ Maps是一种关联式容器,包含“关键字/值”对
begin()??????????返回指向map头部的迭代器
clear()?????????删除所有元素
count()??????????返回指定元素出现的次数
empty()??????????如果map为空则返回true
end()????????????返回指向map末尾的迭代器
equal_range()????返回特殊条目的迭代器对
erase()??????????删除一个元素
find()???????????查找一个元素
get_allocator()??返回map的配置器
insert()?????????插入元素
key_comp()???????返回比较元素key的函数
lower_bound()????返回键值=给定元素的第一个位置
max_size()???????返回可以容纳的最大元素个数
rbegin()?????????返回一个指向map尾部的逆向迭代器
rend()???????????返回一个指向map头部的逆向迭代器
size()???????????返回map中元素的个数
swap()????????????交换两个map
upper_bound()?????返回键值给定元素的第一个位置
value_comp()??????返回比较元素value的函数
java Map 怎么遍历
java Map 遍历一般有四种方式
方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
方式二: 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
方式三:使用Iterator遍历
使用泛型:
不使用泛型:
你也可以在keySet和values上应用同样的方法。
方法四:? 通过键找值遍历(效率低)
作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。
因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。
总结:
如果仅需要键(keys)或值(values)使用方法二。
如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。
否则使用方法一(键值都要)。
扩展资料:
类似的遍历算法:
二叉树的遍历算法
1、先(根)序遍历的递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴ 访问根结点;
⑵ 遍历左子树;
⑶ 遍历右子树。
2、中(根)序遍历的递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵访问根结点;
⑶遍历右子树。
3、后(根)序遍历得递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵遍历右子树;
⑶访问根结点。
参考资料:百度百科——Java
遍历map 为什么得到的第一个value是最后的一个插入的
解决方法:
每次给要传进去的value申请新空间,并把value拷贝进去。
for(int i = 'c'; i 'z'+1; i++)
{
cstrVolDesc.Format(L"%c:Volume %c", i, i);
wchar_t *label = new wchar_t[100];
int nLen = cstrVolDesc.GetLength();
int len = wcslen(label);
wcscpy_s(label, cstrVolDesc.GetLength()+1, cstrVolDesc.GetString());
mapAllVolumes.insert(std::pairchar,wchar_t*(toupper(i), label)); //key using UpperCase
}
总结:map的insert方法每次传进去的value必须保证是不同的内存地址。否则就会覆盖前面使用相同地址value的key。
jsmap怎么判断循环到最后一次
可以使用JavaScript的Array.prototype.forEach()方法中的index参数来判断是否循环到最后一次,index参数表示当前正在处理的元素的索引,可以与Array.length进行比较,如果相等,则表示已经处理到最后一个元素。
例如:
let arr = [1, 2, 3, 4, 5];
arr.forEach(function(item, index) {
if (index === arr.length - 1) {
console.log('This is the last item!');
}
});
Hashmap遍历查询问题
首先,map中是不能存key 相同的值,如果key相同,则key对应的value为最后一次存的值;
然后,遍历map
Map root=new HashMap();
root.put("a", 1);
root.put("a", 100);
root.put("a", 2);
root.put("b", 3);
root.put("b", 44);
root.put("b", 5555);
root.put("c", 1111);
root.put("c", 9);
Iterator it=root.entrySet().iterator();
while(it.hasNext()){
Map.EntryString, Integer entry = (EntryString, Integer) it.next();
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
最后,按照你这种想法,可以将hashmap 换成 arrayList;