映射中循环的迭代器
Iterator for loop in map
我尝试了以下代码,但找不到错误。错误在循环部分,但我无法弄清楚如何正确使用迭代器以避免错误。请帮忙,请澄清我的概念。 问题陈述 https://codeforces.com/contest/268/problem/A。我已经通过矢量解决了它
int main()
{
std::ios::sync_with_stdio(false);
int n,x,y,count=0; cin>>n;
std::vector<pair<int,int>> v;
for (int i = 0; i < n; ++i)
{
cin>>x>>y;
v.push_back(make_pair(x,y));
}
for (int i = 0; i < n; ++i)
{
for (int j=i+1; j < n; ++j)
{
if(v[i].f==v[j].s){
count++;
}
if(v[i].s==v[j].f){
count++;
}
}
}
cout<<count;
return 0;
}
但是通过地图有问题。 它在使用地图时给出 SIGTSTP 错误。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::make_pair;
int main() {
std::ios::sync_with_stdio(false);
int n, x, y, count = 0;
cin >> n;
std::map<int, int> m;
for (int i = 0; i < n; ++i) {
cin >> x >> y;
m.insert(make_pair(x, y));
}
for (auto i = m.begin(); i != m.end(); ++i) {
for (auto j = ++i; j != m.end(); ++j) {
if (i->first == j->second) {
count++;
}
if (i->second == j->first) {
count++;
}
}
}
cout << count;
return 0;
}
不能使用映射数据结构来解决此问题,因为映射以映射方式存储元素。每个元素都有一个键值和一个映射值。没有两个映射的值可以具有相同的键值。
但是根据问题,键值可以相同,所以这就是为什么你不能在这里使用map的原因。
有关更多详细信息,请参阅 http://www.cplusplus.com/reference/map/map/
这是我的答案:
#include <iostream>
#include <map>
const int N = 50;
int h[N], a[N];
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%d", h + i, a + i);
}
int ans = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (i != j) {
if (h[i] == a[j]) ans++;
}
printf("%dn", ans);
return 0;
}
问题的答案是sigma { h[i] = a[j] } (i != j)
.
您的代码犯了以下错误:
std::map::insert
表示将某个键设置为某个值。另外,std::map
与std::multimap
不同。后者允许存在多个相同的密钥,而前者则不允许。您不应该只是将
j
的起点设为i + 1
因为迭代范围应该[0, i - 1]
并集[i + 1, n - 1]
(编辑:您的代码逻辑也是正确的(。迭代器不能如此草率地自我增,因为它有副作用,正如评论部分指出的那样。
相关文章:
- 对于set上的循环-获取next元素迭代器
- 将多个 for 循环组合成单个迭代器
- 使用一个 for 循环如何迭代和测试迭代器值?
- 转到基于范围的 for 循环中的下一个迭代器
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 具有迭代器和自定义步长的循环结束条件
- 映射中循环的迭代器
- 在向量中使用迭代器循环
- C++ 迭代器循环与索引循环
- 使用相同的迭代器循环遍历两个 std::vector
- 我可以用cout而不是迭代器循环打印STL映射吗?
- 迭代器与非迭代器循环,不同的输出,C++
- 将迭代器循环调用end()多次
- 用于 STL 可迭代对象的迭代器循环的宏
- c++中通过迭代器循环遍历数组
- 嵌套迭代器循环,为什么迭代器是相等的?——c++
- 在多线程程序中使用迭代器循环hash_map
- 迭代器循环不计算最后一项
- 如何访问C++列表迭代器循环中的"previous"元素?