1

我不知道以下代码有什么问题,它应该读取数字并将它们的值与位置放在一个成对的向量中,然后对它们进行排序并打印出位置。我用排序删除了该部分 - 我认为问题在那里,但我再次收到编译错误。

#include <iostream>                                                                                                           
#include <vector>                                                                                                             
#include <algorithm>                                                                                                          
#include <utility>                                                                                                            
using namespace std;                                                                                                          

int main(void)
{
        unsigned int n,d,a[65],b[65],s,i,j,t,us=0;
        pair<unsigned int,unsigned int> temp;
        vector< pair<unsigned int,unsigned int> > v;
        cin >> n;
        for(i=0;i<n;i++)
        {
                cin >> t;
                temp(t, i+1);
                v.push_back(temp);
        }
        cin >> d;
        for(i=0;i<d;i++) cin >> a[i] >> b[i];
        for(i=0;i<v.size();i++)
        {
                cout << v[i].first << " -- " << v[i].second << endl;
        }
        return 0;
}

请告诉我问题出在哪里。谢谢。

4

2 回答 2

3

如果您使用它的唯一位置是在该循环中,那么在循环外部创建变量并在循环中多次重复使用它通常是不好的形式。只有在建设成本很高并且重新分配比重新创建便宜时才这样做。通常 C++ 变量应该在它们使用的范围内声明,以便更容易阅读程序的每个部分并能够在以后重新分解它。

在您的情况下,我将temp完全删除对的引用,并将 push_back 调用更改为v.push_back(make_pair(t, i+1)).

于 2010-03-02T13:30:14.180 回答
2

问题是temp(t, i+1);

您需要手动设置第一个和第二个

temp.first = t;
temp.second = i + 1;

或者,您可以在循环内声明 temp (可能是我会做的)。

for(i=0;i<n;i++) 
{ 
    cin >> t; 
    pair<unsigned int,unsigned int> temp(t, i+1); 
    v.push_back(temp); 
} 

或者第二个替代方法,使用 make_pair 辅助函数,并完全取消 temp(感谢 KennyTM 的提醒)

for(i=0;i<n;i++) 
{ 
    cin >> t; 
    v.push_back(make_pair(t, i+1)); 
} 

希望这可以帮助

于 2010-03-02T13:25:38.773 回答