2 u011303839 u011303839 于 2014.04.10 18:00 提问

map<int,int>mymap 从文件输入map怎么输入

题目是这样子的:
硬盘中存有两个数据文件,data1.txt 和 data2.txt。
文件数据格式如下:
item1:value1 item2:value2 item3:value3......
item 和 value 均是整数。试编写程序,合并两个文件的数
据到一个新文件 data.txt 中。新文件中的 item 是原有文件的并
集,按 item 值升序排序(注意原文件并不排序);新文件中的每个
item 对应的 value 值是原文件相应 value 值的和。
文件中,每 10 组数据换一行。
下面是一个简单例子
data1.txt
1:34 18:23 44:54 198:22 12:23 33:23 134:11
data2.txt

18:22 12:11 5:12 6:6 35:12 145:165 20:12 198:28
合并输出文件 data.txt 的内容应该是:
1:34 5:12 6:6 12:34 18:45 20:12 33:23 35:12 44:54 134:11
145:165 198:50

百度到大神写的是这样的:
#include
#include
#include
#include
#include
using namespace std;
void main()
{
string ss="";
map mymap;
ifstream is("data1.txt");
while(is>>ss)
{
mymap[ss.substr(0,ss.find(':'))]=::atoi(
(ss.substr(ss.find(':')+1,ss.size()-ss.find(':')-1)).c_str());
}
is.close();is.clear();
is.open("data2.txt");
while(is>>ss)
{
mymap[ss.substr(0,ss.find(':'))]+=::atoi(
(ss.substr(ss.find(':')+1,ss.size()-ss.find(':')-1)).c_str());
}
map::const_iterator iter=mymap.begin();
ofstream os("data.txt");int cnt=0;
while(iter!=mymap.end())
{
os<<(*iter).first<<":"<<(*iter).second<<" ";
if(++cnt%10==0)
os<<endl;
++iter;
}
os.close();os.clear();
::system("pause");
}

但是这样的输出不符合要求
1:91 100:89 1001:24 1003:45 1005:83 1007:52 101:31 1010:28 1011:22 1017:83
1019:58 1021:8 1024:70 1025:36 1028:96 1030:73 1032:13 1033:124 1035:7 1036:55
104:59 1041:2 1048:65 1049:3 1051:87 1052:69 1054:22 1055:53 106:93 1061:84
1063:89 1066:8 1067:94 1068:53 107:7 1071:61 1072:47 1073:30 1075:4 1079:47
1081:21 1082:7 1083:64 1084:22 1085:74 1086:37 109:9 1092:54 1098:98 11:60
110:164 1103:134 1104:13 111:3 1116:12 112:29 1121:27 1122:92 1123:77 1126:45
1127:78 1129:30 1131:7 1132:85 1134:11 1136:97 1140:67 1143:4 1145:51 1147:87
1151:5 1154:90 116:89 1160:12 1161:40 1163:98 1165:75 1168:123 117:83 1170:25
1171:11 1173:32 1174:83 1178:40 1179:21 1180:100 1183:99 1184:153 1193:107 1195:49
1196:45 120:22 1200:44 1207:4 1208:45 1210:42 1212:34 1215:28 1217:95 1218:100
122:19 1220:65 1224:88 1227:141 1228:30 1229:94 123:57 1230:5 1231:34 1234:6
1235:32 1236:62 1241:34 1242:11 1243:38 1244:57 125:47 1251:85 1252:59 1253:29
1254:45 1256:57 1258:99 1260:9 1261:26 1263:88 127:24 1273:18 1274:116 1275:91
1277:40 1278:77 1279:45 128:57 1280:68 1282:25 1287:43 1290:70 1291:8 1292:91
1293:96 1294:32 1295:50 1298:40 1299:7 130:50 1302:56 1303:30 1305:43 1306:26
1310:36 1311:48 1312:106 1315:88 1318:149 132:24 1323:93 1326:58 1327:97 1328:74
1329:48 1333:9 1339:62 134:74 1340:71 1341:3 1342:33 1343:7 1345:43 1346:96
1348:21 1350:45 1357:30 1359:47 1360:29 1361:64 1362:59 1365:137 1367:71 1371:35
1374:138 1375:114 1378:86 1380:68 1384:89 139:88 1390:93 1391:79 1392:4 1397:93
1398:99 1401:1 1403:42 1404:71 1406:56 1407:33 1412:62 1414:62 1416:78 1417:80
1418:72 1419:12 1421:85 1423:90 1425:46 1427:62 1429:60 1430:25 1431:118 1433:32
1435:32 1437:84 1443:100 1446:43 1447:49 1448:96 145:40 1450:52 1451:82 1454:27
1456:99 1458:94 1460:23 1465:67 1467:43 1468:124 1470:148 1477:83 1479:43 148:9
1485:142 149:88 1490:67 1495:30 1496:79 1497:39 1499:61 15:79 1503:35 1504:23
1505:86 1508:94 1511:86 1516:105 1517:54 152:57 1520:39 1521:3 1523:80 1525:63
153:74 1532:47 1533:61 1534:81 1537:75 1538:12 1542:4 1544:29 1545:94 1547:13
1551:53 1553:64 1554:10 1555:16 1557:58 156:35 1560:79 1563:23 1564:15 1565:36
1566:63 1567:84 1568:66 1569:62 157:90 1574:139 1577:26 158:94 1585:98 1586:43
1587:76 1589:56 1594:2 1598:19 1599:43 1602:13 1605:55 1607:71 1608:11 1609:43
161:40 1611:57 1613:56 1619:52 162:68 1620:99 1622:131 1623:21 1624:64 1626:88
1627:1 163:70 1631:92 1632:92 1633:12 1635:83 1637:86 1641:36 1642:80 1645:10
1650:23 1656:23 1657:13 166:80 1662:75 1665:38 1667:153 1669:95 1670:25 1671:65
1672:88 1674:100 1675:20 1676:12 1678:98 168:45 1680:10 1681:51 1682:74 169:99
1690:16 1695:93 1697:76 1699:93 1703:8 1704:38 1705:68 1707:78 1708:85 1709:68……

老师要求按从小到大的顺序啊 我想是不是因为大神用的是mapmymap 所以我想把它修改成mapmymap 但是就不知道怎么输入了

while(in>>ss)//这里while循环是读文件里面的字符串,直到文件终止跳出,并且将流转成字符串
{
mymap[atoi(ss.substr(0,ss.find(':')))]=::atoi(
(ss.substr(ss.find(':')+1,ss.size()-ss.find(':')-1)).c_str());
//这里ss.substr是找子字符串,find(':')是查找第一个包含:的索引。
//结合起来就是获取从第一个字节开始到第一个:符号的这部分子字符串。
//atoi是字符转int函数。c_str是char*转string的函数。
//这行代码总体的意思就是将文件分成两段,:前面的作为map的键,;后面的字节流转化为int后,作为map的值。
}

总是显示出错 atoi到底怎么用啊 求大神帮助 感激不尽

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
map<string,int>
#include #include #include #include #include using namespace std; void main() { typedef map::iterator mit; map ma; mit it; ifstream in("in.txt"); int c=0; string str; string st; while(
Python一行读入多个整数+map()函数解析
python中的输入raw_input只能读入一个数,但是有时候需要读入多个数,我们该怎么办呢,读两个数可以使用两个raw_input,但是我们如果需要读取十个数怎么办,不能使用十个raw_nput 吧。 import sys num1,num2 = map(int,sys.stdin.readline().split()) print num1,num2 如果需要理解上面的代
推箱子源码
void DrawMap(char Map[][WINTH]) { for (int i=0; i<LENGTH; i++) printf("%s\n",Map[i]); }/*输出地图*/ void playerChoice(int *nextpersonX,int *nextpersonY,int *nextboxX,int *nextboxY) { printf("请输入一个方向 [w,a,s,d]分别代表[上下左右]\n\n"); char direction; direction = getch(); switch (direction) { case 'w': case 'W': (*nextpersonX)--; (*nextboxX)--; break; case 'a': case 'A': (*nextpersonY)--; (*nextboxY)--; break; case 's': case 'S': (*nextpersonX)++; (*nextboxX)++; break; case 'd': case 'D': (*nextpersonY)++; (*nextboxY)++; break; default: printf ("!!!输入错误,请重新输入!!!\n\n"); break; } }/*键盘输入*/ void move(char Map[][WINTH],int *x1,int *y1,int *x2,int *y2) { char temp; temp = Map[*x1][*y1]; Map[*x1][*y1] = Map[*x2][*y2]; Map[*x2][*y2] = temp; *x1 = *x2; *y1 = *y2; }/*移动*/ int isLose(char map[][WINTH],int boxX,int boxY,char obstacle) { printf("(%d,%d)\n",boxX,boxY); if( (map[boxX+1][boxY] == obstacle && map[boxX][boxY+1] == obstacle) ||(map[boxX-1][boxY] == obstacle && map[boxX][boxY+1] == obstacle) ||(map[boxX-1][boxY] == obstacle && map[boxX][boxY-1] == obstacle) ||(map[boxX+1][boxY] == obstacle && map[boxX][boxY-1] == obstacle) ) return true; return false; }/*判断失败*/ int main(void) { //创建坐标 int persionX,persionY,boxX,boxY; persionX = persionY = 1;//人的位置 boxX = boxY = 2;//箱子的位置 char street = ' '; char box = 'X'; char wall = '#'; int isWin = false;//出局条件 int winX = LENGTH - 2; int winY = WINTH - 2;//目标的位置 //构图 使用字符二维数组 char Map[LENGTH][WINTH] = { "##########", "#O ### #", "# X### #", "# #", "##### #", "# ### #", "# #", "# #####", "# ", "##########" }; DrawMap(Map); //接收输入 并不断重绘地图 直到获得胜利
输入字符串,输出各个字符的个数(map用法小例)
#include #include #include using namespace std; void main() { string str; getline(cin, str); map mapChar; for (int i = 0; i { ++mapChar[str[i]]; } map::const_iterator it; for
关于freemarker中map的key只能是String的解决办法。
在实际项目中,map需要存储的内容往往比较复杂。 比如在java中声明的map是这样的 : Map myMap freemarker中使用起来问题就大了,因为freemarker只能用String作为map的key。 搜索了一下前人的解决办法,感觉都不理想,于是自己想了一个办法。 就是使用双map,例如项目的需求是 : Map
【STL】 map
1、说明:系统根据C++ Reference学习下STL--> Map 2、Map:Maps are associative containers that store elements formed by a combination of a key value and a mapped value, following a specific order. 就是说一个key(关键)值映射一
Python学习笔记——从CF A题开始(input.split(),raw_input.split()+list用法)
P.1 input.split() raw_input.split()  参考博客 这两个函数均能接收字符串 , 但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收)。 而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个 SyntaxError 。 raw_input() 将所有
C++中map<int,vector<int>>的初始化和访问方法
今天研究了一下形如map>或map,T>(T为某个内置类型)的关联容器如何初始化并显示其内容的问题,总结了一些版本如下,欢迎补充指正! ################   版本1   ################ #include #include #include #include using namespace std; typedef map,int> mymap; int
入门计划->学用stl std::map<std::string, int>
C++:一种比较流行的强大功能面向对象编程语言,应用和前景都很广阔。stl:C++标准模板库,功能极其强大,将其完全掌握后C++编程会相当容易。map:一种关系式容器,可以根据关键字匹配多种数据。string:"~!@#$%^&*()_+",这样的东东就是。以下程序代码将简单演示如何通过名称(string)关键字匹配id(int),由于程式(程序,受网上资料的影响,偶也开始想把程序
没有可用的复制构造函数或复制构造函数声明
map使用std::map<int, CArray<int,int> > 错误, 解决: 重写CArray, 重载构造函数并加const 添加操作 operator =