term does not evaluate to a function

qizhimao 2007-07-10 05:11:26
程序最后出现一个错误,不晓得怎么解决,请各位大大指点,多谢
...\stlport-4.6.2\stlport\stl\_hashtable.h(557) : error C2064: term does not evaluate to a function
...\stlport-4.6.2\stlport\stl\_hashtable.h(556) : while compiling class-template member function 'unsigned int __thiscall _STL::hashtable<struct _STL::pair<double const ,double>,double,struct _STL::hash<double>,struct _STL::_Sel
ect1st<struct _STL::pair<double const ,double> >,struct _STL::equal_to<double>,class _STL::allocator<struct _STL::pair<double const ,double> > >::_M_bkt_num_key(const double &,unsigned int) const'

在_hashtable.h是指向这段代码的:
size_type _M_bkt_num_key(const key_type& __key, size_t __n) const
{
return _M_hash(__key) % __n;
}

我用VC6+STLport
...全文
788 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qizhimao 2007-07-10
  • 打赏
  • 举报
回复
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <hash_map>
#include <math.h>


using namespace std;

struct NodeDegree
{
string node;
unsigned long degree;

}NDegree;

struct edge
{
string a,b;
}edge1;

vector < NodeDegree > vertex;
vector < edge > temp;
hash_multimap <string, string > link;
hash_multimap <string, string > dlink;

hash_multimap <string, string >::iterator it;
unsigned long degreesize=0;

struct clustering
{
string j;
long float k;

}ck1;
vector<clustering> CluCoe;
hash_map <long float, long float > ckdistribution;
hash_map <long float, long float >::iterator itck;

//split function
template< typename StrT >
int split(const char* str, const char* delim,
vector<StrT>& results, bool empties = true)
{
char* pstr = const_cast<char*>(str);
char* r = NULL;
r = strstr(pstr, delim);
int dlen = strlen(delim);
while( r != NULL )
{
char* cp = new char[(r-pstr)+1];
memcpy(cp, pstr, (r-pstr));
cp[(r-pstr)] = '\0';
if( strlen(cp) > 0 || empties )
{
StrT s(cp);
results.push_back(s);
}
delete[] cp;
pstr = r + dlen;
r = strstr(pstr, delim);
}
if( strlen(pstr) > 0 || empties )
{
results.push_back(StrT(pstr));
}
return results.size();
}

int main()
{

string filename;
filename = "E:\\VC6\\clustering coefficient\\output.txt";
ifstream iFile(filename.c_str(), ios::in);
if(!iFile.is_open())
{
cout << " Error ,can't open the file!" << endl;
return -1;
}

string m,n;
getline(iFile,m);
getline(iFile,n);
unsigned long nodemumber = atoi(m.c_str()); //string to int
unsigned long linknumber = atoi(n.c_str());

for (int x=0;x<nodemumber;++x)
{
string line1;
getline(iFile,line1);
vector<string> parts;
split(line1.c_str(), "\t", parts);
unsigned long i = atoi(parts[1].c_str()); //string to int
NDegree.node = parts[0];
NDegree.degree = i; //对结构体赋值
vertex.push_back(NDegree); // 把结构体放入向量vertex的尾部
parts.clear();
}

string line2;
getline(iFile,line2);


//存储边seek if there are links among neighbors
for (int y=0;y<linknumber;++y)
{
string line3;
getline(iFile,line3);
vector<string> parts;
split(line3.c_str(), "\t", parts);
edge1.a=parts[0];
edge1.b=parts[1];
temp.push_back(edge1);//把边赋值给临时向量
link.insert(make_pair(parts[0],parts[1]));//对hash_multimap赋值
parts.clear();
}



//seek neighbors of one node: 对每条边逆转存放
for (int z=0; z<temp.size(); ++z)
{
dlink.insert(make_pair((temp.at(z)).a,(temp.at(z)).b));//对multimap赋值
dlink.insert(make_pair((temp.at(z)).b,(temp.at(z)).a));//逆转这条边
}
temp.clear();


/* int k;
for (k=0; k<vertex.size(); ++k)
{
cout << vertex.at(k).node+"\t" << vertex.at(k).degree << endl;
}

cout << endl;

for (it=link.begin(); it!=link.end();++it)
{
cout << (*it).first+"\t" << (*it).second << endl;
}

cout << endl;

for (it=dlink.begin(); it!=dlink.end();++it)
{
cout << (*it).first+"\t" << (*it).second << endl;
}
*/


for (int c=0; c<vertex.size();++c)
{
int h=0;
long float ck=0;
int d;//number of neighbors
string e;
e=vertex.at(c).node;
d=vertex.at(c).degree;
vector <string> neighbors; //存放邻居顶点
vector <string> ::iterator present1,present2;
typedef hash_multimap <string, string>::const_iterator ite;
typedef pair<ite, ite> pos;
pos range=dlink.equal_range(e); //找到邻居顶点的位置范围
for(ite i=range.first; i!=range.second; ++i)
neighbors.push_back(i->second); //赋值给向量

//查找实际存在的边数
for (it=link.begin();it!=link.end();++it)
{
//int h;
string f,g;
f=it->first;
g=it->second;
present1=find(neighbors.begin(),neighbors.end(),f);
present2=find(neighbors.begin(),neighbors.end(),g);

if( (present1!=neighbors.end()) && (present2!=neighbors.end()) )
++h;
}
neighbors.clear();
ck=(2*h)/(d*(d-1));// 计算clustering coefficient
ck1.j=e;
ck1.k=ck;
CluCoe.push_back(ck1);//把节点和对应的ck存入向量

}

for (int l=0; l<CluCoe.size(); ++l)//统计CluCoe中各个ck出现的次数
{
if ((itck=ckdistribution.find((CluCoe.at(l)).k))==ckdistribution.end())
ckdistribution[(CluCoe.at(l)).k]=1;
else
itck->second++;
}

ofstream file("result.txt");
for (itck=ckdistribution.begin(); itck!=ckdistribution.end();++itck)
{
file << (*itck).first << "\t" << (*itck).second <<endl;
}

file.close();


}

主要是求一个图中顶点的聚类系数clustering coefficient.被定义为它所有相邻节点之间连边的数目占可能的最大连边数目的比例。
taodm 2007-07-10
  • 打赏
  • 举报
回复
贴你写的那段代码。stlport是不会错的。
另外,建议用intel9.1取代vc6自己的编译器。

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧