C++におけるpairの使い方および関数の複数の戻り値の使い方

4823 ワード

注意:文章は多くの人のブログを転載するため、私はただ総合的にします.
pairのタイプ:
pairはテンプレートタイプです.各pairは2つの値を格納できます.この2つの値には制限はありません.自分で書いたstructのオブジェクトを入れることもできます.
    pair p;
    pair p;
   pair p;
どちらでもいいです...  
適用:1つの関数に2つの戻り値がある場合、同じタイプであれば配列で返すことができ、異なるタイプであればstructを自分で書くことができますが、便利にするためにc++持参のpairを使って、2つの値を持つpairを返すことができます.戻り値の適用を除いて、1つのオブジェクトに複数の属性がある場合は、通常自分でstructを1つ書き、2つの属性であればpairで操作できます.の
pairを適用すると、自分でstructを書くことができます...3つの属性があれば、実は使えるpairの、極端な書き方pair>
書き方が極端だ.(後ろの2つ>>スペースを指定しないと>>シフト演算子になります)
makr_pair:
   pairp (5,6);
   pair p1= make_pair(5,6);
   pair p2 ("aa",5.0);
   pair p3 = make_pair("aa",5.0);
この2つの書き方でpairを生成します.
pairの値を取得するにはどうすればいいですか.の
各pairにはfirstとsecondの2つの属性値があります
 cout<
メソッドではなく属性値であることに注意してください.
pairタイプの使用は煩雑であるため、同じpairタイプを複数定義する場合はtypedefが宣言を簡略化することができます.
typedef pair author;
author pro("May", "Lily");
author joye("James", "Joyce");
pairの使用:
#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include   
  
using namespace std;  
  
#define ll long long  
#define llu unsigned long long  
#define INF 100000000  
  
//  pair     ,  typedef         
const int maxn = 100+10;  
typedef pair P;  
char maze[maxn][maxn];//            
int n,m;  
int sx,sy;//      
int gx,gy;//      
int d[maxn][maxn]; //               
//           
int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1};  
  
//  (sx,sy) (gx,gy)       
//      ,  INF  
int bfs()  
{  
    queue

que; // INF for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) d[i][j] = INF; // , 0 que.push(P(sx,sy)); d[sx][sy] = 0; // 0 while(que.size()) //while(!que.empty()) { // P p = que.front(); // cout << p.first << " " << p.second << endl; que.pop(); // , if(p.first == gx && p.second == gy) break; // for(int i = 0; i < 4; ++i) { // (nx,ny) int nx = p.first + dx[i],ny = p.second + dy[i]; // (d[nx][ny] != INF ) if(0 <= nx && nx < n && 0 <= ny && ny < m && maze[nx][ny] != '#' && d[nx][ny] == INF) { // , p +1 que.push(P(nx,ny)); d[nx][ny] = d[p.first][p.second] + 1; } } } return d[gx][gy]; } void solve() { int res = bfs(); printf("%d
",res); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); #endif // ONLINE_JUDGE while(cin >> n >> m) { memset(maze,0,sizeof(maze)); for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) { cin >> maze[i][j]; if(maze[i][j] == 'S') {sx = i; sy = j;} if(maze[i][j] == 'G') {gx = i; gy = j;} } // cout << sx << " " << sy << endl; // for(int i = 0; i < n; ++i) // { // for(int j = 0; j < n; ++j) // cout << maze[i][j]; // cout << endl; // } solve(); } return 0; }


structの使用:
// n      ,     ,         。               。  
#include   
#define N 3  
struct Student  
{  
    int num;  
    char name[20];  
    float socre[3];  
    float aver;  
};  
void input(struct Student stu[])  
{  
    int i;  
    printf("         :  ,  ,     :
"); for(i=0;istu[m].aver) m=i; return stu[m]; } void print(struct Student stud) { printf("

"); printf(" :%d
:%s
:%5.1f,%5.1f,%5.1f
:%6.2f
",stud.num,stud.name,stud.socre[0],stud.socre[1],stud.socre[2],stud.aver); } int main() { struct Student stu[N],*p=stu; input(p); print(max(p)); return 0; }