- 浏览: 208410 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhuchao_ko:
有用的废话。。。
架构与产品 -
450029462:
java学好了 c++其实也不难,就是 宏多点 内存控制多点 ...
从java转向C\c++开发要学会些什么 -
ldlzagg:
...
启示2013 -
raojl:
书是买了, 一直没时间捣鼓!
我发现开始喜欢Python了 -
raojl:
回过头看了看也不全然对啊,呵呵!
IT行业发展‘VIA’模式探讨
StatusGrap.cpp
StatusGrap.h
大家帮忙看看 << 和 >>重载有问题呢?
StdStudy.obj : error LNK2001: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class StatusGraph<char> &)" (??5@YAAAV?$basi
c_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$StatusGraph@D@@@Z)
D:\StdStudy\StdStudy.cpp(30) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class StatusGraph<char>' (or there is no acceptable conversion)
Error executing cl.exe.
Creating browse info file...
全是迭代,厉害个毛!有空帮我看看问题!
// StatusGraph.cpp: implementation of the StatusGraph class. // ////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "StatusGraph.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// /* template<typename vertex> StatusGraph<vertex>::~StatusGraph() {}*/ template<typename vertex> void StatusGraph<vertex>::erase_vertex(const vertex& v){ adj_map::iterator m_iter = adj_map.find(v); if(m_iter == adj_map.end() ) return ; adj_map.erase(m_iter); m_iter =adj_map.begin(); while (m_iter !=adj_map.end()) { list<dest_vertex<vertex> > & edge_list = (*m_iter).second; list<dest_vertex<vertex> >::iterator list_iter = edge_list.begin(); for (;list_iter != edge_list.end();list_iter ++) { if ( (*list_iter).dest == v ) { edge_list.erase(list_iter); break; } } m_iter++; } } template<typename vertex> int StatusGraph<vertex>::edge_count(){ int count =0; graphMap::iterator m_iter = adj_map.begin(); for (;m_iter != adj_map.end();m_iter ++) { count += (*m_iter).second.size(); } if (d) return count; else return count / 2 ; } template<typename vertex> int StatusGraph<vertex>::get_weight(const vertex &v1,const vertex &v2){ graphMap::iterator iter =adj_map.find(v1); if (iter != adj_map.end() && adj_map.find(v2) != adj_map.end()) { list<dest_vertex<vertex> >& edge_list = (*iter).second; list<dest_vertex<vertex> >::iterator list_iter = edge_list.begin(); while(list_iter != edge_list.end()){ if ((*list_iter).dest == v2) { return (*list_iter).weight; } list_iter++; } } return -1; } template<typename vertex> void StatusGraph<vertex>::insert_edge(const vertex &v1,const vertex &v2,const int& weight){ if (contains_edge(v1,v2)) return; insert_vertex(v1); insert_vertex(v2); list<dest_vertex<vertex> > & e_list1 = (*(adj_map.find(v1)) ).second; e_list1.push_back(dest_vertex<vertex>(v2,weight)); if (d) { return ; } list<dest_vertex< vertex> >& e_list2 = (*(adj_map.find(v2))).second; e_list2.push_back(dest_vertex<vertex>(v1,weight)); } template<typename vertex> void StatusGraph<vertex>::erase_edge(const vertex& v1,const vertex&v2){ graphMap::iterator iter = adj_map.find(v1); if (iter == adj_map.end() || adj_map.find(v2) == adj_map.end()) { return ;// no node v1\v2 } list<dest_vertex<vertex> >& e_list1 = (*iter).second; list<dest_vertex<vertex> >::iterator list_iter = e_list1.begin(); for (; list_iter != e_list1.end(); list_iter ++) { if ((*list_iter).dest == v2 ) { found = true; e_list1.erase(list_iter); break; } } if (d || !found) return; iter = adj_map.find(v2); list<dest_vertex<vertex> >& e_lsit2 = (*iter).second; list_iter = e_lsit2.begin(); for (; list_iter != e_lsit2.end();list_iter ++) { if ((*list_iter).dest == v1) { e_lsit2.erase(list_iter); break; } } } template<typename vertex> bool StatusGraph<vertex>::contains_edge(const vertex &v1,const vertex &v2){ graphMap::iterator iter = adj_map.find(v1); if (iter != adj_map.end() && adj_map.find(v2) ! = adj_map.end()) { list<dest_vertex<vertex> >& edge_list = (*iter).second; list<dest_vertex<vertex> >::iterator list_iter = edge_list.begin(); for (;list_iter != edge_list.end(); list_iter ++) { if((*list_iter).dest == v2) return true; } } return false; } template<typename vertex> istream& operator>>(istream&istr,StatusGraph<vertex> &g){ cout << "待实现!" <<endl; return istr; } template<typename vertex> ostream& operator<<(ostream&ostr,const StatusGraph<vertex>&g){ g.output(); return ostr; } template<typename vertex> void StatusGraph<vertex>::output() const{ cout << "待实现!" <<endl; }
StatusGrap.h
#if !defined(AFX_STATUSGRAPH_H__239AC296_43C3_4CD4_A788_91E56564168C__INCLUDED_) #define AFX_STATUSGRAPH_H__239AC296_43C3_4CD4_A788_91E56564168C__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <map> #include <list> #include <string> #include <iostream> using namespace std; enum gkind {undigraph,digraph}; template<typename vertex> struct dest_vertex { vertex dest;//顶点 int weight;//权重 dest_vertex(const vertex& x,const int& wet) { dest = x; weight =wet; } bool operator > (const dest_vertex<vertex> &e) const { return weight > e.weight; } }; template<typename vertex> class StatusGraph { public: StatusGraph(gkind t = digraph):d(t){} /* * */ StatusGraph(const StatusGraph& g){ adj_map = g.adj_map; } /* * */ ~StatusGraph(){}; /** * return this graph's size. */ int size(){ return adj_map.size(); } /** * return this graph is empty or not ! */ bool empty(){ return adj_map.size() == 0; } /** * check a vertex is own to the container or not . */ bool contain_vertex(const vertex &v){ return adj_map.find(v) != adj_map.end(); } /* * insert a vertex into the container. */ void insert_vertex(const vertex& v) { if (adj_map.find(v)) == adj_map.end() ) { adj_map[v] = list<dest_vertex<vertex>>(); } } /** * @author raojl * @desc: what node you want to delete * @Edit 2010.06.20 */ void erase_vertex(const vertex& v); /* * */ int edge_count(); /* * */ bool contains_edge(const vertex &v1,const vertex &v2); /* * */ int get_weight(const vertex &v1,const vertex &v2); /* * */ void insert_edge(const vertex &v1,const vertex &v2,const int& weight); /* * */ void erase_edge(const vertex &v1,const vertex &v2); /* * */ list<dest_vertex<vertex> > get_incident_edges(const vertex & v)const { return (*adj_map.find(v)).second; } /* * */ vertex first_vertex(){ return (*adj_map.begin()).first; } public: friend istream& operator>>(istream&istr,StatusGraph<vertex>& g); friend ostream& operator<<(ostream&ostr,const StatusGraph<vertex> &g); //void dfs_traversal();//深度优先搜索 //void bfs_traversal();//广度优先搜索 private: typedef map<vertex,list< dest_vertex<vertex> > > graphMap; graphMap adj_map; gkind d; //list<vertex> dfs(vertex& start,map<vertex,bool>* visited); //list<vertex> bfs(vertex& start,map<vertex,bool>* visited); void output() const; }; #endif // !defined(AFX_STATUSGRAPH_H__239AC296_43C3_4CD4_A788_91E56564168C__INCLUDED_)
int main(int argc, char* argv[]) { typedef char vertex; StatusGraph<vertex> tt(digraph); cin>>tt; cout << tt; return 0; }
大家帮忙看看 << 和 >>重载有问题呢?
StdStudy.obj : error LNK2001: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class StatusGraph<char> &)" (??5@YAAAV?$basi
c_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$StatusGraph@D@@@Z)
D:\StdStudy\StdStudy.cpp(30) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class StatusGraph<char>' (or there is no acceptable conversion)
Error executing cl.exe.
Creating browse info file...
评论
2 楼
raojl
2010-06-28
lijinyan3000 写道
这些代码自己实现的?
厉害!!
水平很高了!
厉害!!
水平很高了!
全是迭代,厉害个毛!有空帮我看看问题!
1 楼
lijinyan3000
2010-06-28
这些代码自己实现的?
厉害!!
水平很高了!
厉害!!
水平很高了!
发表评论
-
服务端口快扫shell
2014-08-25 11:50 686#set -x var_start=8000 arra ... -
远程批量部署
2014-07-29 11:50 594#!/usr/bin/expect -- if ... -
linux 下建立异步链接
2014-05-07 11:59 538int32_t SockEndPoint::connect_ ... -
atomic笔记
2013-12-11 11:43 360inline void ice_atomic_set(ic ... -
求最大公共子串
2013-07-15 11:21 693#include <stdio.h> #inc ... -
日志记录
2013-01-14 09:25 708[root@localhost Capserver]# ... -
c开发笔记
2012-02-03 09:36 6681、就是有大量的输入参数或输出参数需要一次性交换时,可以考虑定 ... -
编译校验【代码笔记】
2011-06-17 09:07 5611、版本编译控制(比如多项目) 2、编译校验 3、s ... -
GCC注意笔记
2011-02-22 18:38 700大多数程序和库在编译 ... -
gsoap编写webservice应用
2010-06-01 15:02 2120The gSOAP tools minimize applic ... -
setsockopt 笔记
2010-04-22 15:12 7791、TCP_NODELAY是唯一使用IPPROTO_TCP层的 ... -
随录-增量记录
2010-02-25 10:41 644程序开发,对于日志的记录需要主要以下几个问题。 1、多线程或 ... -
快速入门sqlite内存数据库,用sqlite构建一日志工具
2009-12-25 11:28 3692今天上午无意在搜索的时候发现很多应用程序用了sqllite,o ... -
dos脚本+ftp实现快速升级
2009-12-25 09:52 1453cd \ ;写ftpget.src文件,存储ftp命令。该文件 ... -
花三分钟看看这个文档
2009-11-30 19:14 766linux 命令精简 Unix/Linux Command ... -
推荐一款xml分析微型库tinyxml
2009-08-22 08:16 1272tinyxml,至所以叫tin,就是短小精悍。搭配前面讲的gs ... -
用gsoap编写webservice客户端接口dll的方法案例
2009-08-22 07:55 28871)使用手册:见http://gsoap2.source ... -
命令随写
2009-08-13 16:22 708ocrale启动监听:lsnrctl start 启动服务:o ... -
LUA 分析文件
2009-06-02 14:07 1101BUFSIZE = 2^13 -- 8K ... -
避免对指针和数字类型重载
2009-05-22 14:17 766条款25: 避免对指针和数字类型重载 快速抢答: ...
相关推荐
对于诸如图的着色问题等高级应用,邻接表提供了一种清晰且直观的解决方案,有助于简化算法设计和实现过程。掌握图的邻接表存储和操作,对于任何从事计算机科学或相关领域的专业人士来说都是必不可少的技能之一。
在C++中,图的常见实现方式之一是邻接表。本项目提供了一个C++实现的邻接表,能够处理有向图和无向图,并且使用了类模板来增强代码的通用性。以下是对这个项目的详细解释: 首先,邻接表是一种存储图的有效方式,...
在C语言中,我们可以用多种方式来实现图,其中一种常见的方法就是邻接链表。本文将详细讲解如何使用邻接链表法来实现图,并介绍上述描述中的各项操作。 1. **创建图**:创建图通常涉及到定义节点(Vertex)和边...
采用邻接表来实现图的存储,并输入输出邻接表的信息,并用邻接表来实现图的广度优先遍历。
在编程中,有多种方法来存储图,其中两种常用的方法是邻接矩阵和邻接表。这两种方法各有优缺点,适用于不同类型的图和不同的操作需求。 邻接矩阵是一种二维数组,其中的每个元素代表两个顶点之间是否存在边。如果...
图的邻接表实现,用邻接矩阵实现了图,基本操作,主要算法
通过以上分析可以看出,这段代码实现了基于邻接表的图的表示和操作。邻接表是一种高效存储稀疏图的方法,适用于边的数量远少于顶点数量的平方的情况。此外,代码还提供了随机生成边的功能,这对于测试图算法非常有用...
Dijkstra算法适用于没有负权边的图,可以配合邻接矩阵或邻接表实现。对于邻接矩阵,可以直接访问权重;对于邻接表,可以使用优先队列(如二叉堆)来快速找到最小距离的节点。 总结来说,邻接矩阵和邻接表是图的主要...
本文将深入探讨如何使用邻接矩阵和邻接表这两种方法来创建图,并实现深度优先搜索(DFS)和广度优先搜索(BFS)算法。 首先,我们来看邻接矩阵。邻接矩阵是一个二维数组,其中的元素代表图中节点之间的连接状态。...
《数据结构与算法(C++版)》先关 邻接表表示的图的广度优先遍历的动画演示
实现图的深度和广度优先搜索 /* 邻接表的结点类型 */ typedef struct arc {int adjvex; struct arc *next;}ArcNode; typedef struct VexNode {int vertex; ArcNode *firstarc; }VerNode; typedef VerNode ...
根据给定文件的信息,我们可以提炼出以下关于使用邻接多重表实现图遍历的相关知识点: ### 一、邻接多重表的基本概念 邻接多重表是一种用于存储无向图的数据结构,它通过在每个顶点处维护一个指向与之相连的所有边...
1、 定义邻接表存储的图类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建一个邻接表存储的图; 2)返回图中指定边的权值; 3)返回图中某顶点的第一个邻接顶点; 4)返回图中某顶点关于另一个顶点的下...
本篇将详细介绍如何使用邻接表来实现图,并以Windows 32位环境下的Visual Studio 2013为开发工具进行阐述。 邻接表是一种常用的图存储结构,相较于邻接矩阵,它更加节省空间,尤其对于稀疏图(边的数量远小于顶点...
在编译原理中,自动机是一种重要的概念,用于识别和处理特定的语言或模式。自动机主要有两种类型:非确定性有限...通过邻接表这一数据结构,可以有效地组织和操作DFA的状态转移关系,从而实现高效的自动机识别功能。
建立有向图的邻接表更简单,每当读人一个顶点对序号 ,j> 时,仅需生成一个邻接序号为j的边表结点,将其插入到vj的出边表头部即可。 同时没个节点带权访问。 邻接表的形式说明 typedef struct node{//边表结点 ...
Dijkstra算法C++邻接表实现,用邻接表存图,还有记录路径。
图是数据结构中的一种重要...综上所述,`createadjlist.cpp`和`creatematix.cpp`文件分别实现了图的邻接表和邻接矩阵存储,为理解和操作图提供基础。通过阅读和理解这些代码,你可以更好地掌握这两种重要的图数据结构。
邻接表法建立图程序代码 邻接表法是图的存储结构之一,通过建立邻接表来存储...邻接表法建立图程序代码是使用C++语言实现的,它可以快速地创建和输出图的信息。在实际应用中,邻接表法可以广泛应用于图的存储和处理。
领会图的两种主要存储结构、图基本运算算法和两种遍历算法设计内容:编写一个程序,设计带权图的邻接矩阵与邻接表的创建和输出运算,并在此基础上设计一个主程序完成如下功能:(1)建立如图所示的有向图G的邻接矩阵...