代碼如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <cstring>
#include <algorithm>
#include <stdio.h>
#include <ctype.h>
#include <ctime>
#include <numeric>
#include <math.h>
#include <omp.h>
#include <Eigen/Dense>
#include <bitset>
#include <stdlib.h>
using namespace Eigen;
using namespace std;
template <typename T1,typename T2,typename T3>
bool cmp_1(const pair<T1, pair<T2, T3> > a, const pair<T1, pair<T2, T3> > b)
{
return a.first<b.first;//自定義的比較函式
}
template <typename T1,typename T2,typename T3>
bool cmp_2(const pair<T1, pair<T2, T3> > a, const pair<T1, pair<T2, T3> > b)
{
return a.second.first<b.second.first;//自定義的比較函式
}
int main()
{
vector<string> chrom1;
vector<pair<int, pair<int , int> > > chr_idx;
ifstream file;
file.open("map_test1.txt");
ofstream ofile;
ofile.open("test");
string thisline;
char *p;
int idx=0;
vector<int> chrom;
vector<int> position;
vector<int> index;
while (getline(file, thisline,'\n'))
{
idx++;
p=strtok(&thisline[0]," \t");
chrom.push_back(atoi(p));
p=strtok(NULL," \t");
position.push_back(atoi(p));
// chr_idx.push_back(make_pair(p, idx));
index.push_back(idx);
}
cout<<idx<<endl;
cout<<chr_idx.size()<<endl;
for(int i=0;i<idx;i++)
{
chr_idx.push_back(make_pair(chrom[i],make_pair(position[i],index[i])));
}
sort(chr_idx.begin(), chr_idx.end(), cmp_1);//按照第一個元素排序
int one_chr_num_star=0;
int one_chr_num_end;
int current_chr_num=chr_idx[0].first;
int max_arr_num=idx-1; //存盤snp位置陣列的最大下標
for(int i=0;i<=max_arr_num;i++)
{
if(chr_idx[i].first!=current_chr_num)
{
one_chr_num_end=i-1;
sort(chr_idx.begin()+one_chr_num_star, chr_idx.begin()+one_chr_num_end+1, cmp_2);//按照第二個元素排序
one_chr_num_star=i;
current_chr_num=chr_idx[i].first;
}
}
sort(chr_idx.begin()+one_chr_num_star, chr_idx.end(), cmp_2);//按照第二個元素排序
cout<<chr_idx.size()<<endl;
for (int i = 0; i<chr_idx.size(); i++)
cout<< chr_idx[i].first << " " << chr_idx[i].second.first <<" "<<chr_idx[i].second.second<< endl;
file.close();
}
map_test1.txt檔案內容如下:

編譯時報錯:[Error] no matching function for call to 'sort(std::vector<std::pair<int, std::pair<int, int> > >::iterator, std::vector<std::pair<int, std::pair<int, int> > >::iterator, <unresolved overloaded function type>)'
提示自定義函式出問題了,把cmp_和cmp_2改成如下形式就能編譯通過,是用template用得不對嗎?求指點
bool cmp_1(const pair<int, pair<int, int> > a, const pair<int, pair<int, int> > b)
{
return a.first<b.first;//自定義的比較函式
}
bool cmp_2(const pair<int, pair<int, int> > a, const pair<int, pair<int, int> > b)
{
return a.second.first<b.second.first;//自定義的比較函式
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81462.html
標籤:C++ 語言
上一篇:Python—海龜作圖
